2016-03-11 3 views
1

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

Мой код:

tuu = [1,2,3,4,'nan', 8] 

for i in range(len(tuu)): 
    if tuu[i] == 'nan': 
     del tuu[i] 

, но я получаю сообщение об ошибке:

 7 for i in range(len(tuu)): 
----> 8  if tuu[i] == 'nan': 
     9   del tuu[i] 

IndexError: list index out of range 
+0

Попробуйте метод удалить. – Elan

+0

'[i for i in lst if i! = 'Nan']' –

+0

Если вы хотите удалить элемент в цикле for, используя 'range (len (list))' while iterating, вы должны удалить его [обратный путь] (http://stackoverflow.com/questions/35618307/how-to-transform-string-into-dict/35618686#35618686) (проверьте ссылку) – Ian

ответ

2

При использовании for цикла, Python будет вызывать __iter__ на итерации вы цикл над. __iter__ вернет объект итератора, который отслеживает, где вы сейчас находитесь в своем итерируемом.

Если вы изменяете длину своего итерабельного (списка) при переходе через него, итератор будет запутан.

После удаления tuu[i] ваш список имеет один меньше элемента, но итератор не будет знать и пытается получить доступ к предыдущему индексу -> здесь вы получите IndexError.

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

>>> tuu = [1, 2, 3, 4, 'nan', 8] 
>>> tuu = [x for x in tuu if x != 'nan'] 
>>> tuu 
[1, 2, 3, 4, 8] 
+0

В этом случае 'tuu [5]' был удален. Если кто-то хотел удалить элемент из того же индекса в другом списке, как бы это сделать? Другими словами, как можно найти индекс удаленных элементов из первого списка и удалить элементы из того же индекса из второго списка? – mikey

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