簡體   English   中英

使用Python 2比較2個列表的所有元素

[英]Comparing all elements of 2 lists with Python 2

我有2個列表: a = ['5', '2', '3', '4']b = ['1', '6', '7', '5'] 使用Python 2,如何將a中的每個列表元素與ba每個元素進行比較? (即a[0] == b[0]a[0] == b[1]等)。

我知道我可以寫出很多if語句,但是我希望有一種更優雅的方法。

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

編輯:這不是重復項,b / ci將兩個不同的列表相互比較,而可能的重復項僅處理了一個列表。

listcount()方法可能會有所幫助:

>>> 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

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

from collections import Counter
counts = Counter(b)

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

如果僅關注共享值,而不關注它們的位置或計數,請將其轉換為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的解決方案不同,因為它是對稱的,即,如果在列表a存在5 a ,在列表b ,則共享計數將為1 ,而不是2

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)

這段代碼將產生包含在ab列表中的元素列表

a = [1,2,3,4]
b = [2,3,1,7]
c = [e for e in a if e in b]

如果使用大數組,則內存可能會很復雜,但是如果您打算使用此數據,那為什么不呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM