在list1中查找同样位于list2中的项目,并删除不在list1中的项目

时间:2011-06-23 15:08:27

标签: python list

我想找到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中的项目在所需项目后面有数字。如何找到list1list2中的常用项目,并删除list2中不在list1中的项目(同时仍保留0和{0}之后的项目。重叠的项目?)

4 个答案:

答案 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]