簡體   English   中英

在Python列表中查找相似項目的有效方法

[英]Efficient way to find similar items in a list in Python

我有一個列表列表,如下所示:

list_1 = [[[1,a],[2,b]], [[3,c],[4,d]], [[1,a],[5,d]], [[8,r],[10,u]]]

我試圖找到一個元素是否是此列表類似於另一個元素。 現在,我將其循環兩次,即對於每個元素,檢查其余元素。 我的輸出是:

[[[1,a],[2,b]], [[1,a],[5,d]]]

有辦法更有效地做到這一點嗎?

謝謝。

您可以使用itertools.combinations和類似的任何功能

from itertools import combinations
for item in combinations(list_1, 2):
    if any(i in item[1] for i in item[0]):
        print item

輸出量

([[1, 'a'], [2, 'b']], [[1, 'a'], [5, 'd']])

我假設類似地,您的意思是該元素中至少有一對匹配的對。 在這種情況下,您可以將每個元素映射到列表的字典兩次(而不是嵌套循環)(對其中的每個[number,str]對一次)。 完成后,字典中的每個鍵都將映射到包含該鍵(即相似)的元素列表。

示例代碼:

list_1 = [[[1,'a'],[2,'b']], [[3,'c'],[4,'d']], [[1,'a'],[5,'d']], [[8,'r'],[10,'u']]]

d = {}

for elt in list_1:
    s0 = '%d%s' % (elt[0][0], elt[0][1])
    if s0 in d:
        d[s0].append(elt)
    else:
        d[s0] = [elt]

    s1 = '%d%s' % (elt[1][0], elt[1][1])
    if s1 in d:
        d[s1].append(elt)
    else:
        d[s1] = [elt]

for key in d.keys():
    print key, ':', d[key]

輸出示例:

1a : [[[1, 'a'], [2, 'b']], [[1, 'a'], [5, 'd']]]
8r : [[[8, 'r'], [10, 'u']]]
2b : [[[1, 'a'], [2, 'b']]]
3c : [[[3, 'c'], [4, 'd']]]
5d : [[[1, 'a'], [5, 'd']]]
4d : [[[3, 'c'], [4, 'd']]]
10u : [[[8, 'r'], [10, 'u']]]

長度大於1的所有dict條目都具有相似的元素。 假設您有辦法獲取a,b,c等的字符串表示形式,這會將代碼的運行時復雜度降低到O(n)。

暫無
暫無

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

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