我想取两个列表,并找出出现在这两个列表中的值。
a = [1, 2, 3, 4, 5]
b = [9, 8, 7, 6, 5]
returnMatches(a, b)
例如,将返回[5]。
我想取两个列表,并找出出现在这两个列表中的值。
a = [1, 2, 3, 4, 5]
b = [9, 8, 7, 6, 5]
returnMatches(a, b)
例如,将返回[5]。
当前回答
您也可以尝试这样做,将公共元素保存在一个新列表中。
new_list = []
for element in a:
if element in b:
new_list.append(element)
其他回答
我更喜欢基于集合的答案,但这里有一个不管怎样都有用的答案
[x for x in a if x in b]
这不是最有效的方法,但到目前为止最明显的方法是:
>>> a = [1, 2, 3, 4, 5]
>>> b = [9, 8, 7, 6, 5]
>>> set(a) & set(b)
{5}
如果顺序很重要,你可以用这样的列表推导式来做:
>>> [i for i, j in zip(a, b) if i == j]
[5]
(仅适用于同等大小的列表,这意味着顺序重要性)。
这是为那些可能返回某个字符串或输出的人准备的, 下面是代码,希望能有所帮助:
lis =[]
#convert to list
a = list(data)
b = list(data)
def make_list():
c = "greater than"
d = "less_than"
e = "equal"
for first, first_te in zip(a, b):
if first < first_te:
lis.append(d)
elif first > first_te:
lis.append(c)
else:
lis.append(e)
return lis
make_list()
使用__and__属性方法也可以。
>>> a = [1, 2, 3, 4, 5]
>>> b = [9, 8, 7, 6, 5]
>>> set(a).__and__(set(b))
set([5])
或者简单地
>>> set([1, 2, 3, 4, 5]).__and__(set([9, 8, 7, 6, 5]))
set([5])
>>>
下面的解决方案适用于列表项的任何顺序,并且还支持两个列表的长度不同。
import numpy as np
def getMatches(a, b):
matches = []
unique_a = np.unique(a)
unique_b = np.unique(b)
for a in unique_a:
for b in unique_b:
if a == b:
matches.append(a)
return matches
print(getMatches([1, 2, 3, 4, 5], [9, 8, 7, 6, 5, 9])) # displays [5]
print(getMatches([1, 2, 3], [3, 4, 5, 1])) # displays [1, 3]