У мене є список, який складається приблизно з 20000 списків. Я використовую 3-й елемент кожного списку як прапор. Я хочу виконати деякі операції в цьому списку до тих пір, поки щонайменше прапор одного елемента дорівнює 0, це так:
my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], .....]
На початку всі прапори дорівнюють 0. Я використовую цикл час, щоб перевірити, чи хоча б прапор одного елемента дорівнює 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 = [["a", "b"], ["c", "d"], ["e", "f"], .....]
Оскільки я не міг видалити елементи під час повторення, я вигадав ці прапори. Але він my_list
містить багато елементів, і while
цикл читає їх у кожному for
циклі, і це забирає багато часу! Чи є у вас якісь пропозиції?
None
або []
під час перегляду списку замість того, щоб видаляти їх. Перевірка всього списку за допомогою повторення "check ()" над усіма елементами перед кожним проходом у внутрішній цикл є дуже повільним підходом.