我有一个包含20000个列表的列表 . 我使用每个列表的第3个元素作为标志 . 我想在这个列表上做一些操作,只要至少有一个元素的标志是0,它就像:
my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], .....]
在开始时,所有标志都是0.我使用while循环来检查至少一个元素的标志是否为0:
def check(list_):
for item in list_:
if item[2] == 0:
return True
return False
如果 check(my_list)
返回 True
,那么我继续处理我的列表:
while check(my_list):
for item in my_list:
if condition:
item[2] = 1
else:
do_sth()
实际上,当我迭代它时,我想删除my_list中的一个元素,但是当我迭代它时,我不允许删除项目 .
原始的my_list没有标志:
my_list = [["a", "b"], ["c", "d"], ["e", "f"], .....]
因为我迭代它时无法删除元素,所以我发明了这些标志 . 但 my_list
包含许多项目,并且 while
循环在每个 for
循环中读取所有这些项目,并且它消耗了大量时间!你有什么建议吗?
5 回答
这种方式比使用
all()
更灵活:另一种使用
itertools.ifilter
的方法 . 这会检查真实性和过程(使用lambda
)样品-
你可以像这样使用itertools,一旦满足条件就会停止你的语句 . 相反的方法将会失败
这里最好的答案是使用all(),这是这种情况的内置 . 我们将它与generator expression结合起来,以产生您想要的干净和高效的结果 . 例如:
并且,对于他的过滤器示例,列表理解:
如果要检查至少一个元素是0,更好的选择是使用更可读的any():
如果要检查列表中的任何项是否违反条件,请使用
all
:要删除所有不匹配的元素,请使用
filter