список удалить () проблемы - PullRequest
0 голосов
/ 26 июня 2018

Remove () не работает для меня должным образом в этом случае, когда я пытаюсь удалить элементы из моего списка, которые не содержат двоеточия. Вот мой список;

myList = ['hosts:127.0.0.1','-nU','-nT','-cA','-nB']

Делать separated = myList.split(','), а затем

for i in separated:
    if ':' not in i:
    separated.remove(i)

print separated

оставляет меня с ['hosts:127.0.0.1', '-nT', '-nB'] в качестве вывода. Я предполагаю, что это потому, что remove () удаляет только первый соответствующий элемент. Это все еще не объясняет, почему -nt и -nb будут там, хотя. Что может быть хорошей альтернативой этому?

Спасибо

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Проблема в том, что вы перебираете список по мере удаления элементов. Рассмотрим это небольшое изменение в вашем коде:

myList = ['hosts:127.0.0.1','-nU','-nT','-cA','-nB']
for i in myList :
    print(i)
    if ':' not in i:
         myList.remove(i)

Выход:

hosts:127.0.0.1
-nU
-cA

Таким образом, ваш цикл for никогда не просматривает две записи списка. Вы могли бы рассмотреть возможность использования понимания списка здесь, как предложил jpp.

0 голосов
/ 26 июня 2018

Используйте цикл for, чтобы пройти через каждый элемент списка Как это for i in range(0,len(myList)-1): if ":" not in myList[i]: myList.remove(myList[i])

0 голосов
/ 26 июня 2018

Не изменяйте свой список во время его итерации.

Вместо этого используйте копию или, идиотически, понимание списка:

separated = [i for i in myList if ':' in i]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...