【发布时间】:2012-05-26 19:50:39
【问题描述】:
我有一个包含大约 20000 个列表的列表。我使用每个列表的第三个元素作为标志。我想对这个列表做一些操作,只要至少有一个元素的标志为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 循环中读取所有项目,并且它消耗大量时间!你有什么建议吗?
【问题讨论】:
-
看起来您的数据结构不适合您的问题。如果您再解释一下上下文,也许我们可以提出更合适的建议。
-
也许你可以用
None或[]替换这些项目,因为你遍历列表而不是删除它们。在每次通过内部循环之前使用“check()”迭代所有项目来检查整个列表是一种非常缓慢的方法。
标签: python list for-loop while-loop