【发布时间】:2020-05-19 16:03:24
【问题描述】:
我正在尝试使用另一个列表过滤掉一个列表。但是,我用来过滤另一个列表的列表元素不是相同的字符串。请看我的例子,因为它会更有意义:
mylist = ['14001IB_L1P0', '14001OB_L1P1', '14002IB_L3P0', '14003OB_L1P1', '14001OB_L2P0']
remove_list = ['14001', '14002']
我想从 mylist 中删除以 remove_list 中的值开头的值。 我试过这样做:
filtered_mylist = mylist[:]
for x in remove_list:
for i in filtered_mylist:
if x in i:
print('remove ' +i)
filtered_mylist.remove(i)
else:
print('keep '+i)
但是,结果是这样的:
remove 14001IB_L1P0
keep 14002IB_L3P0
keep 14003OB_L1P1
remove 14001OB_L2P0
keep 14001OB_L1P1
remove 14002IB_L3P0
这就是 filters_mylist 的组成部分:
['14001OB_L1P1', '14003OB_L1P1']
但是,它应该只包含 1 个元素:
['14003OB_L1P1']
在我看来,由于某种原因,循环跳过了第一个循环中的第二个元素“14001OB_L1P1”。为什么会这样?
【问题讨论】:
-
不要从您当前正在迭代的列表中删除项目,这会导致某些项目被跳过。