匹配所有内容的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:请删除旧问题;这毫无意义。实际上,最好删除这个问题,然后重新开始一个全新的问题。请注意,(无,)
并不完全是一个匹配的“无”:它做数学运算无
。您希望什么都不匹配的是()
。如何才能