如何检查列表/矩阵中的所有项目在python中是不同的

时间:2015-12-14 22:17:40

标签: python list matrix unique elements

给定列表的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

5 个答案:

答案 0 :(得分:1)

如果元素都是可散列的(示例中的整数是),则可以将它们添加到集合中以检查重复项。

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

这样做的好处就是一旦找到第一个副本就会退出(短路)

答案 1 :(得分:1)

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

答案 2 :(得分:0)

不是最佳,但简洁:

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

答案 3 :(得分:0)

也许:

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

答案 4 :(得分:0)

将所有内容存储在一个列表中,然后使用 count

检查每个元素的出现次数
String codes = StringUtils.join(code,",");  
Cursor  cursor = myDataBase.rawQuery("select description from codes where code in (?)",new String[]{codes});
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){
    result.add(cursor.getString(1));
}
cursor.close();