2016-08-31 2 views
0

Я пытаюсь очистить список питона, удаляя каждый элемент в цикле с помощью кодаСписок стирания неожиданного поведения

x=list(range(10000)) 
for i in x: 
    x.remove(i) 

Я думал, что после этого кода х должен быть [], но вместо этого только каждого второй элемент списка удаляется. len (x) = 5000 вместо .

Почему это так? Что я делаю не так. Thanks

+1

Или http://stackoverflow.com/questions/6022764/python-removing-list-element-while-iterating-over-list –

ответ

1

Если вы хотите, чтобы очистить список питона, как вы делаете, правильно только с помощью x.clear, документы о этом методе here, теперь, если вы хотите, чтобы удалить элементы, используя некоторые фантазии условия, просто использовать filter, пример очищая весь x список:

x = list(range(10000)) 
x = filter(lambda x: False, x) 
print x 
1

a.remove (i) испорченный индексирование - это мое предположение.

использовать вместо

a.clear() 

это хороший способ, чтобы очистить список.

0

Если вы хотите реализовать объект списка, который стирает себя в то время как итерация над ним, что было бы довольно легко:

class ErasingList(list): 
    "a list implemented as an iterator, iterating over it will .pop() items off" 
    def __iter__(self): 
     return self 
    def __next__(self): 
     try: 
      return self.pop(0) 
     #or self.pop() to take from the end of the list which is less intuitive but more efficient 
     except IndexError: 
      raise StopIteration 
    next = __next__ #vs2 compatibility. 

x = ErasingList(range(100)) 

for i in x: 
    print(i) 

print(x) 
0
original_list = list(range(1000)) 
remove_list_elements = [] 

for i in range(0, len(original_list), 2): 
    remove_list_elements.append(original_list[i]) 

[original_list.remove(i) for i in remove_list_elements] 
print(len(original_list)) 
Смежные вопросы