簡體   English   中英

如何檢查列表/矩陣中的所有項目在python中是否不同

[英]how to check all items in a list/matrix are different in python

給定一個列表的NxN矩陣,我如何確定列表中的所有元素都是唯一的示例輸入:

(check_unique_elem([[8, 3, 4], [1, 5, 9], [6, 7, 2]]))
example output:
 True
(check_unique_elem([[1]]))
True
(check_unique_elem([[2,3],[6,5],[6,7]]))
False

如果所有元素都是可哈希的(示例中的整數是),則可以將它們添加到集合中以檢查重復項。

def check_unique_elem(L):
    seen = set()
    for row in L:
        for i in row:
            if i in seen:
                return False
            seen.add(i)
    return True

這樣的好處是,一旦找到第一個重復項,就會立即退出(短路)

from itertools import chain

print(len(set(chain(*l))) == sum(len(s) for s in l))

如果您的列表很大,則有更有效的方法,如果沒有,那么這是一種執行所需操作的簡潔方法。

有點像代碼高爾夫,但是我們可以在子列表的基礎上短路:

l = [[8, 3, 4], [7, 5, 9], [33, 12, 22]]

st = set()
print(not any(b == -1 for b in (st.update(s) if st.isdisjoint(s)  else -1
                            for s in map(set, l))))

並非最佳,但簡潔:

def check_unique_elem(mat):
    flat = [c for row in mat for c in row]
    return len(flat) == len(set(flat))

在不太可能的情況下,也不太可能發生定時攻擊


或者,如果您想要單線:

import collections

has_duplicate = collections.Counter(c for row in mat for c in row).most_common(1)[0][1] > 1

也許:

def check_unique_elem(mylist):
    flattened_list = [i for sublist in mylist for i in sublist]
    return len(set(flattened_list)) == len(flattened_list)

print(check_unique_elem([[8, 3, 4], [1, 5, 9], [6, 7, 2]]))
print(check_unique_elem([[1]]))
print(check_unique_elem([[2,3],[4,5],[6,7]]))

將所有內容存儲在一個列表中,然后使用count檢查每個元素的出現情況:

def elements_are_unique(new_list):
    for element in new_list:
        icount = new_list.count(element)
        if icount > 1:
            return False
    return True

暫無
暫無

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

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