Безопасно ли изменять элементы внутри цикла enumerate (), если за ним следует разрыв? - PullRequest
2 голосов
/ 30 сентября 2019

Я написал некоторый код Python, который просматривает список, как показано ниже:

for idx, r in enumerate(mylist):
    if condition:
        del mylist[idx]
        break

Мой вопрос заключается в том, безопасно ли изменять этот список внутри цикла (как в примере выше) какпока у меня есть это заявление о перерыве? Или я все еще должен изменять список за пределами цикла?

1 Ответ

3 голосов
/ 30 сентября 2019

Да, это безопасно, если этот код не является одновременным, если другие потоки не собираются использовать mylist одновременно. Но пока у нас есть GIL Я думаю, это безопасно. Лучше всего обернуть его в функцию и вернуть новую копию таким образом, чтобы побочные эффекты были свободны

def create_my_list(mylist):
  mylist = mylist[:] #to create local copy as mylist is passed by reference
  #mylist is a localcopy here
  for idx, r in enumerate(mylist):
      if condition:
        del mylist[idx]
        break
  return mylist 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...