Есть ли лучше (очевидно,/идиоматический) способ питона писать эквивалентPython идиома для итерации изменения списка
index = 0
while index < len(some_list):
do_some_stuff(some_list[index]) # may have many side effects
if delete_element(some_list[index]):
del some_list[index]
else:
index += 1
или словарную эквивалент этого для словарей? Dict/list comprehension - это не вещь, потому что результат delete_element
может зависеть от do_some_stuff
.
Ваш вызов 'enumerate' не будет генерировать индексы, которые соответствуют вашим обратным значениям (' somelist [-len (somelist) +1] 'is' somelist [0] '). Вы, вероятно, хотите «перечислить (обратный (somelist), 1)», а затем «del somelist [-index]». – Blckknght
@Blckknght - ваше право, я хотел использовать abs (i). перечисление не учитывается в обратном направлении, поэтому трюк должен начинаться с отрицательного значения и доходить до нуля. Но, как вы говорите, использование отрицательного индекса удаляет неправильное значение. - исправлено в коде. – tdelaney
А, это работает лучше. Однако я бы использовал '-i', а не' abs (i) ', поскольку последний выполняет проверку, чтобы увидеть, какой знак имеет значение, которое вам не нужно (вы всегда хотите отрицать существующее значение). – Blckknght