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

Python For循环中的函数未返回正确的值,python,list,Python,List,我有一个问题,它与for循环、list(追加/删除)有关 名单如下: 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

我有一个问题,它与for循环、list(追加/删除)有关

名单如下:

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']

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

for i in L[:]:

您可以在使用copy.copy()对列表进行迭代时复制列表


是的,你可能不应该在迭代列表时修改它——试着用for循环写出它,看看它是否开始做你想做的事情。
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']