2012-07-28 162 views
6

因此,为了给出一个没有任何代码编写的粗略示例,我很好奇我将如何弄清楚两个列表的共同点。在Python中比较两个列表

例子:

listA = ['a', 'b', 'c'] 
listB = ['a', 'h', 'c'] 

我希望能够返回:

['a', 'c'] 

怎么会这样?

john = 'I love yellow and green' 
mary = 'I love yellow and red' 

,并返回:

'I love yellow and' 

回答

16

使用交集:

list(set(listA) & set(listB)) 

给出:

与像变量字符串

可能

['a', 'c'] 

注意,因为我们正在处理这可能维持秩序:

' '.join(list(set(john.split()) & set(mary.split()))) 
'I and love yellow' 

使用join()的结果列表转换成一个字符串。

-

对于示例/下面的评论,这将维持秩序(从@DSM通过评论的启发)

' '.join([j for j, m in zip(john.split(), mary.split()) if j==m]) 
'I love yellow and' 

对于情况下列表是不一样的长度,其结果如以下注释中所述:

aa = ['a', 'b', 'c'] 
bb = ['c', 'b', 'd', 'a'] 

[a for a, b in zip(aa, bb) if a==b] 
['b'] 
+0

反正是有维持秩序? – Matthew 2012-07-28 02:37:16

+2

@Matthew:你希望这个方法在'['a','b','c']'和'['c','b','d','a']' ? – liori 2012-07-28 02:38:37

+1

我希望看到它返回'['b']'。 – Matthew 2012-07-28 02:40:52

2

如果两个列表的长度相同,则可以做一个并排迭代对,就像这样:

list_common = [] 
for a, b in zip(list_a, list_b): 
    if a == b: 
     list_common.append(a) 
+3

你需要使用'zip(list_a,list_b)',我想。 – DSM 2012-07-28 02:23:57

+0

你是对的。 – CosmicComputer 2012-07-28 02:31:36

+0

它们长度不一样。我可能有一个列表,其中有 ['green'] ,另一个列表有 ['red','yellow','green']我需要它返回['green'] – Matthew 2012-07-28 02:38:52

1

相交它们作为集:

set(listA) & set(listB) 
+0

你能不能给我一个工作的例子,我怎么能如何使用它: 约翰=“我喜欢黄色和绿色” 玛丽=“我喜欢黄色和红色” 并返回: “我(黄色)和' – Matthew 2012-07-28 02:25:20

+0

'''.join(str(x)for x(set(john.split(''))&set(mary.split(''))) – Ryan 2012-07-28 02:27:07