比较Python中的两个列表

Mat*_*hew 8 python string variables comparison list

所以为了给出一个粗略的例子而没有为它编写任何代码,我很好奇我将如何弄清楚两个列表的共同点.

例:

listA = ['a', 'b', 'c']
listB = ['a', 'h', 'c']
Run Code Online (Sandbox Code Playgroud)

我希望能够回归:

['a', 'c']
Run Code Online (Sandbox Code Playgroud)

怎么会这样?

可能有变量字符串,如:

john = 'I love yellow and green'
mary = 'I love yellow and red'
Run Code Online (Sandbox Code Playgroud)

并返回:

'I love yellow and'
Run Code Online (Sandbox Code Playgroud)

Lev*_*von 20

使用set intersection:

list(set(listA) & set(listB))
Run Code Online (Sandbox Code Playgroud)

得到:

['a', 'c']
Run Code Online (Sandbox Code Playgroud)

请注意,由于我们正在处理集合,因此可能无法保留顺序:

' '.join(list(set(john.split()) & set(mary.split())))
'I and love yellow'
Run Code Online (Sandbox Code Playgroud)

使用join()所得到的列表转换成一个字符串.

-

对于下面的示例/评论,这将保留顺序(受@DSM评论的启发)

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

对于列表长度不同的情况,请使用以下注释中指定的结果:

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

[a for a, b in zip(aa, bb) if a==b]
['b']
Run Code Online (Sandbox Code Playgroud)

  • @Matthew:在"['a','b','c']`和`['c','b','d','a']`的情况下,你希望这种方法返回什么? (2认同)