2015-09-08 2 views
0

Я пытаюсь перебрать список с элементами. Когда элемент обрабатывается, я хочу удалить элемент и записать список в файл. Но есть проблема, что удаляются только элементы на четных позициях.Удаление элементов из списка во время итерации по нему

Вот очень простой пример:

>>> x = [1,2,3,4,5,6,7,8,9] 
>>> for i in x: 
...  print x 
...  x.remove(i) 
...  write_x_into_the_file() 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 
[2, 3, 4, 5, 6, 7, 8, 9] 
[2, 4, 5, 6, 7, 8, 9] 
[2, 4, 6, 7, 8, 9] 
[2, 4, 6, 8, 9] 

Я думаю, что это потому, что он перебирает с помощью индекса приращения. Знаете ли вы какое-то pythonic обходное решение?

+0

Что вы * на самом деле пытаетесь достичь? * – jonrsharpe

+0

Эти элементы URLs в реальном. Я хочу сделать некоторые вещи со всеми этими URL-адресами (чтобы получить некоторые данные). Но иногда бывают ситуации, когда соединение падает или схожие проблемы. Чтобы иметь возможность продолжить работу с URL-адресом, где возникла проблема, я должен сохранить их в файле. –

+0

Так почему же это влечет за собой удаление элементов из списка во время итерации по нему? – jonrsharpe

ответ

0
x = [1,2,3,4,5,6,7,8,9][::-1] 
while len(x): 
    ele = x.pop() # equv to ordinary for loop 

x = [1,2,3,4,5,6,7,8,9] 
while len(x): 
    ele = x.pop() # reversed loop 
-1

Вы можете следить за всеми показателями, которые должны быть удалены, и просто удалить их после

delete = [] 
my_list = [1,2,3,4,5,6,7,8,9] 
for i, x in enumerate(my_list): 
    write_x_into_the_file() 
    delete.append(i) 

for d in delete: 
    del my_list[d] 
+1

. Это * точно такая же проблема *, индексы сдвигаются, когда вы удаляете вещи! – jonrsharpe

Смежные вопросы