匹配所有内容的python列表

匹配所有内容的python列表,python,filtering,list-comprehension,Python,Filtering,List Comprehension,我可能没有问对:我想要一个可以匹配任何列表的列表值:(无,) 但即使使用(无,)它也会将项目匹配为无(我不想要) 关键是我有一个函数在使用:[x代表我的列表中的x,如果x[field]不在过滤器列表中] 我想过滤所有内容或不过滤任何内容,而不进行如下测试: 如果筛选列表==(无,):返回[]和如果筛选列表=('*',):返回我的筛选列表 PS:我想简化我的问题,这会导致一些错误(listidentifier)或愚蠢的事情[x代表x];) 嗨 我需要在python中使用列表理解进行一些过滤 如果

我可能没有问对:我想要一个可以匹配任何列表的列表值:
(无,)
但即使使用
(无,)
它也会将项目匹配为无(我不想要)

关键是我有一个函数在使用:
[x代表我的列表中的x,如果x[field]不在过滤器列表中]

我想过滤所有内容或不过滤任何内容,而不进行如下测试:
如果筛选列表==(无,):返回[]
如果筛选列表=('*',):返回我的筛选列表

PS:我想简化我的问题,这会导致一些错误(
list
identifier)或愚蠢的事情
[x代表x]
;)


我需要在python中使用列表理解进行一些过滤

如果我这样做:

[x for x in list if x in (None,)]
我去掉了所有的价值观,这很好

但我想用同样的东西来匹配所有东西

我可以这样做:

[x for x in list if x not in (None,)]
但它不会与其他部分相同

我尝试了一些方法,但例如
(True,)
只匹配
1

请注意,要筛选的值不是数字,但是如果您有一些通用的(如
(None,)
来不匹配任何内容),那就太好了

谢谢
Louis

更好的语法是:

[x for x in lst if x is None]
[x for x in lst if x is not None]

更好的语法是:

[x for x in lst if x is None]
[x for x in lst if x is not None]

你不需要
,如果
,你可以说

[x for x in list]

你不需要
,如果
,你可以说

[x for x in list]
你这是什么意思

我想要同样的东西来匹配所有的东西

照办

[x for x in list]
而且
列表中的每一项都是匹配的。

你说的是什么意思

我想要同样的东西来匹配所有的东西

照办

[x for x in list]
列表中的每个项目都匹配

但是我想要同样的 所有东西都匹配

为了匹配所有内容,您不需要if语句

[x for x in list1]
或者如果你真的喜欢

[x for x in list1 if x in [x]]
但是我想要同样的 所有东西都匹配

为了匹配所有内容,您不需要if语句

[x for x in list1]
或者如果你真的喜欢

[x for x in list1 if x in [x]]

回答您修改后的问题:“匹配”所有可能值的列表实际上是无限长的。因此,如果没有if测试,你就无法完成你想做的事情。我建议您的arg应该是一个列表,或者是表示“全部”和“无”情况的两个值之一:

如果过滤器列表较大,您可能希望将最后一行替换为:

    filter_set = set(filter_list)
    return [x for x in alist if x not in filter_set]

或者,不要麻烦;只需记录filter_list(重命名为filter_collection)可以是任何支持
\uu包含的内容(
),并提醒读者集合将比列表快。

回答您的修订问题:“匹配”所有可能值的列表实际上是无限长的。因此,如果没有if测试,你就无法完成你想做的事情。我建议您的arg应该是一个列表,或者是表示“全部”和“无”情况的两个值之一:

如果过滤器列表较大,您可能希望将最后一行替换为:

    filter_set = set(filter_list)
    return [x for x in alist if x not in filter_set]

或者,不要麻烦;只需记录filter_list(重命名为filter_collection)可以是支持
\u包含的任何内容(
),并提醒读者集合将比列表快。

您可以将程序更改为接受筛选器对象,而不是列表

抽象基过滤器将有一个
matches
方法,如果x*匹配,该方法将返回true

您的常规案例筛选器将使用列表参数构造,并根据列表的成员身份进行筛选-如果参数在列表中,则
matches
函数将搜索列表并返回
true

过滤器对象还可以有两个特殊的子类:none和all


这些将具有特殊的匹配函数,它们总是返回
true
(全部)或
false
(无)。

您可以将程序更改为接受筛选对象,而不是列表

抽象基过滤器将有一个
matches
方法,如果x*匹配,该方法将返回true

您的常规案例筛选器将使用列表参数构造,并根据列表的成员身份进行筛选-如果参数在列表中,则
matches
函数将搜索列表并返回
true

过滤器对象还可以有两个特殊的子类:none和all


这些将具有特殊的匹配函数,它们总是返回
true
(all)或
false
(none)。

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu是检查序列中是否存在某些内容的神奇方法:

class everything(object):
    def __contains__(self, _):
        return True           

for x in (1,2,3):
    print x in everything()

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
是一种神奇的方法,它可以检查某

class everything(object):
    def __contains__(self, _):
        return True           

for x in (1,2,3):
    print x in everything()

list
是一个保留字,您不应该将其用作标识符。事实上:这只是出于演示目的:我无论如何都删除了它。您可以发布一个您想要的示例吗?假设您有
my_list=[1,2,None,4]
filter_list
=[2]`输出应该是什么。请添加您的输入own@Louis:请删除旧问题;这毫无意义。实际上,最好删除这个问题,然后重新开始一个全新的问题。请注意,
(无,)
并不完全是一个匹配的“无”:它做数学运算
。你不想匹配的是
()
列表
是一个保留字,你不应该将它用作标识符。事实上:这只是为了演示目的:我无论如何都删除了它。你可以发布一个你想要的示例吗?假设您有
my_list=[1,2,None,4]
filter_list
=[2]`输出应该是什么。请添加您的输入own@Louis:请删除旧问题;这毫无意义。实际上,最好删除这个问题,然后重新开始一个全新的问题。请注意,
(无,)
并不完全是一个匹配的“无”:它做数学运算
。您希望什么都不匹配的是
()
。如何才能