Функция внутри цикла For Не возвращает правильное значение - PullRequest
0 голосов
/ 06 апреля 2019

У меня проблема, и она касается цикла for, список (добавление / удаление).

Вот список:

L = ['Josh', 'started:', '14:39', '8305955', 'frenchs', '10', '8305955-fr001', '8305955-fr002', '8305955-fr003', '8305955-fr004', '8305955-fr005', 'ended:', '14:39']

Когда я запускаю приведенный ниже код.

D = "-fr"
E = []
for i in L:
    if D not in i:
        L.remove(i)
    else:
        E.append(i)

L[6] удалено и не добавлено в список E. Список E должен возвращать нижеследующее, но первый индекс отсутствует.

E = ['8305955-fr001', '8305955-fr002', '8305955-fr003', '8305955-fr004', '8305955-fr005']

Ответы [ 2 ]

3 голосов
/ 06 апреля 2019

Вы не должны изменять список во время итерации по нему.Простой способ решить эту проблему - выполнить итерацию по копии, разрезав ее на части:

for i in L[:]:
2 голосов
/ 06 апреля 2019

Вы можете сделать копию списка, перебирая его, используя copy.copy (https://docs.python.org/3/library/copy.html)

import copy
L = ['Josh', 'started:', '14:39', '8305955', 'frenchs', '10', '8305955-fr001', '8305955-fr002', '8305955-fr003', '8305955-fr004', '8305955-fr005', 'ended:', '14:39']

copy_L = copy.copy(L)
D = "-fr"
E = []
for i in copy_L:
    if D not in i:
        L.remove(i)
    else:
        E.append(i)

print(E)
#['8305955-fr001', '8305955-fr002', '8305955-fr003', '8305955-fr004', '8305955-fr005']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...