我正在尝试使用另一个列表过滤出一个列表。但是,我用来过滤其他列表的列表元素不是相同的字符串。请参阅我的示例,因为它将更有意义:
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
这是filtered_mylist的组成部分:
['14001OB_L1P1', '14003OB_L1P1']
但是,它应仅包含1个元素:['14003OB_L1P1']
在我看来,由于某种原因,该循环跳过了第一个循环中的第二个元素“ 14001OB_L1P1”。为什么会这样呢?
这是一个班轮
mylist = list(filter(lambda x: all([x.find(y) != 0 for y in remove_list]), mylist))
#Output
['14003OB_L1P1']
在all([x.find(y) != 0 for y in remove_list])
将返回True
当且仅当x
不从单个值开始remove_list
。
all()
意味着所有人都必须True
。x.find(y) != 0
意思x
并非以开头y
。
其余的只是执行过滤器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句