使用Python 2比较2个列表的所有元素

时间:2016-03-20 15:31:51

标签: python list python-2.x

我有2个列表:a = ['5', '2', '3', '4']b = ['1', '6', '7', '5']。使用Python 2,如何将a中的每个列表元素与b中的每个元素进行比较? (即a[0] == b[0]a[0] == b[1]等等。

我知道我可以写出许多if语句,但我希望有更优雅的方法来做到这一点。

检查每个列表元素后,我想知道找到共享值的次数(在上面的示例列表中,它将是一次,'5')。

编辑:这不是重复,b / c我将两个不同的列表相互比较,而可能的重复只处理了一个列表。

5 个答案:

答案 0 :(得分:5)

list的{​​{3}}方法可能有所帮助:

>>> a = ['5', '2', '3', '4']
>>> b = ['1', '6', '7', '5']
>>> for item in a:
...     print item, b.count(item)
... 
5 1
2 0
3 0
4 0

答案 1 :(得分:2)

大输入可能比eugene y's更快,因为它只需要迭代b一次,
而不是len(a)次:

from collections import Counter
counts = Counter(b)

for i in a:
    print(i, counts[i])

答案 2 :(得分:1)

如果您只关注共享值,而不关注其位置或计数,请将其转换为set并使用intersection

>>> a = ['5','2','3','4']
>>> b = ['1','6','7','5']
>>> set(a).intersection(b)
{'5'}

如果您想保留元素在交叉点中出现的频率,您还可以使用&

进行collections.Counter的交集
>>> a = ['5','2','3','4','1','1','6','5']
>>> b = ['1','6','7','5','5']
>>> collections.Counter(a) & collections.Counter(b)
Counter({'5': 2, '1': 1, '6': 1})

注意:这与@GingerPlusPlus的解决方案的不同之处在于它是对称的,即如果列表5中存在a一次,列表b中存在两次,那么共享计数将为1,而不是2

答案 3 :(得分:0)

def cmp(*lists):
    lists_len_min = list(map(lambda x: len(x), lists))
    if min(lists_len_min) != max(lists_len_min):
        raise Exception("Lists must have equal length")
    iterator = iter(lists)
    last = next(iterator)
    for element in iterator:
        for i, each in enumerate(element):
            #print(i, last[i], each)
            if last[i] != each:
                return False
    else:
        return True

此功能可以比较所需数量相同的列表。只需调用cmp(list1,list2,list3)

答案 4 :(得分:0)

此代码将生成包含ab列表

的元素列表
a = [1,2,3,4]
b = [2,3,1,7]
c = [e for e in a if e in b]

如果您使用大型数组,但是如果您打算使用此数据,那么内存可能会很复杂