我想找到list1
中的项目:
list1 = ['peach', 'plum', 'apple', 'kiwi', 'grape']
也位于list2
:
list2 = ['peach,0,1,1,0,1,0,1', 'carrot,1,0,1,1,0,1,1', 'lime,0,1,1,0,1,1,0', 'apple,0,1,1,0,1,1,1']
问题是list2
中的项目在所需项目后面有数字。如何找到list1
和list2
中的常用项目,并删除list2
中不在list1
中的项目(同时仍保留0和{0}之后的项目。重叠的项目?)
答案 0 :(得分:9)
# using a set makes the later `x in keep` test faster
keep = set(['peach', 'plum', 'apple', 'kiwi', 'grape'])
list2= ['peach,0,1,1,0,1,0,1', 'carrot,1,0,1,1,0,1,1',
'lime,0,1,1,0,1,1,0', 'apple,0,1,1,0,1,1,1']
# x.split(',',1)[0] = the part before the first `,`
new = [x for x in list2 if x.split(',',1)[0] in keep]
答案 1 :(得分:0)
伪代码:
for each i in list1
foreach j in list2
if j.contains(i)
list2.remove(j)
将j和i视为字符串,并查看每个元素是否包含列表1中的元素。
答案 2 :(得分:0)
Cédric的答案(已被删除,但感谢他是一个很好的灵感)错过了你有一个包括所有0和1的字符串这一点。完成:
for item in list1:
try:
list2.remove(item.split(',')[0])
except ValueError:
pass
最高
答案 3 :(得分:0)
这样的事情可能有所帮助(注意它会创建新的列表对象):
list1= ['peach', 'plum', 'apple', 'kiwi', 'grape']
list2= ['peach,0,1,1,0,1,0,1', 'carrot,1,0,1,1,0,1,1', 'lime,0,1,1,0,1,1,0', 'apple,0,1,1,0,1,1,1']
list2 = [x for x in list2 for y in list1 if x.split(',')[0]==y]