У меня есть список, состоящий из примерно 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 () `итерации по всем элементам перед каждым проходом во внутреннем цикле - очень медленный подход.