For循环中的函数未返回正确的值

时间:2019-04-06 20:29:20

标签: python list

我有一个问题,关于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 个答案:

答案 0 :(得分:4)

在迭代列表时,您不应修改列表。解决此问题的一种简单方法是通过对副本进行切片来对其进行迭代:

for i in L[:]:

答案 1 :(得分:2)

您可以在使用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']