Как удалить элементы из списка во время его итерации, не пропуская будущие итерации [дубликат]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как удалить элементы из списка во время его итерации, не пропуская будущие итерации [дубликат]

Сообщение Anonymous »

В Python я заметил, что если я перебираю список с помощью for x в y и удаляю элемент y в цикле, последний элемент будет «пропущен» - Я предполагаю, что это связано с изменением len(y).
Я пытаюсь получить все файлы с определенным расширением, кроме тех, которые соответствуют некоторым условиям.< /p>
Вот исходный код:

Код: Выделить всё

def test_print_numTXTs(fileList):
counter = 0
for file in fileList:
if file.name[-4:] == ".txt":
counter +=1
if file.name == "a.txt":
fileList.remove(file)   #problem caused here
print(counter)
print(len(fileList))
Вывод счетчика на единицу меньше общего количества файлов .txt. Пройдя через отладчик, я вижу, что он пропускает последнюю итерацию цикла (я предполагаю, потому что len(fileList) теперь равен -=1 относительно его начальной len()) .
Следующий код «работает», но выглядит как хак: я добавляю файлы, которые хочу удалить из списка, во второй список, а затем повторяю его после факт. Я закомментировал исходную строку, что привело к «пропуску» итераций.

Код: Выделить всё

def print_numTXTs(fileList):
filesToRemoveFromList = []
counter = 0
for file in fileList:
if file.name[-4:] == ".txt":
counter +=1
if file.name == "a.txt":
#fileList.remove(file) #problem caused here
filesToRemoveFromList.append(file)
print(counter)
for file in filesToRemoveFromList:
fileList.remove(file)
print(len(fileList))
Этот код выводит количество всех файлов .txt, а длина списка на единицу меньше (поскольку элемент a.txt был удален) – это желаемое поведение .
Есть ли более элегантное решение этой проблемы?

Подробнее здесь: https://stackoverflow.com/questions/672 ... ipping-fut
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»