检查列表中的列表相同(python)

时间:2015-03-25 01:56:38

标签: python list

我想检查列表列表中是否没有相同的条目。如果没有相同的匹配,则返回True,否则返回False。

例如:

[[1],[1,2],[1,2,3]]  # False
[[1,2,3],[10,20,30]] # True

我正在考虑将所有条目合并到一个列表中, 例如:将[[1,2,3] [4,5,6]]改为[1,2,3,4,5,6],然后检查

感谢您编辑问题并帮助我!

7 个答案:

答案 0 :(得分:1)

>>> def flat_unique(list_of_lists):
...     flat = [element for sublist in list_of_lists for element in sublist]
...     return len(flat) == len(set(flat))
... 
>>> flat_unique([[1],[1,2],[1,2,3]])
False
>>> flat_unique([[1,2,3],[10,20,30]])
True

答案 1 :(得分:1)

我们可以使用itertools.chain.from_iterableset内置函数。

import itertools

def check_iden(data):
    return len(list(itertools.chain.from_iterable(data))) == len(set(itertools.chain.from_iterable(data)))

data1 = [[1],[1,2],[1,2,3]]

data2 = [[1,2,3],[10,20,30]]    

print check_iden(data1)

print check_iden(data2)

返回

False
True

答案 2 :(得分:0)

您可以使用具有交集方法的集合来查找哪些元素是常见的

答案 3 :(得分:0)

将每个子列表的所有元素放入单独的列表中。如果该单独列表有任何重复项(请致电set()查找),则return False。否则return True

def identical(x):
    newX = []
    for i in x:
        for j in i:
            newX.append(j)
    if len(newX) == len(set(newX)): # if newX has any duplicates, the len(set(newX)) will be less than len(newX)
        return True
    return False

答案 4 :(得分:0)

我认为您可以平展列表并计算其中的元素,然后将其与set()进行比较

import itertools
a = [[1],[1,2],[1,2,3]] 
b = [[1,2,3],[10,20,30]]

def check(l):
    merged = list(itertools.chain.from_iterable(l))
    if len(set(merged)) < len(merged):
        return False
    else:
        return True


print check(a)  # False
print check(b)  # True

答案 5 :(得分:0)

根据您的数据,您可能不想查看所有元素,这是一个在您第一次复制后立即返回False的解决方案。

def all_unique(my_lists):
    my_set = set()
    for sub_list in my_lists:
        for ele in sub_list:
            if ele in my_set:
                return False
            my_set.add(ele)
    else:
        return True

结果:

In [12]: all_unique([[1,2,3],[10,20,30]])
Out[12]: True

In [13]: all_unique([[1],[1,2],[1,2,3]])
Out[13]: False

答案 6 :(得分:-1)

使用此方法将使布尔变量&#34;相同&#34;如果列表中有一个多次出现的数字,则转为True,因为.count()函数会返回列表中找到所述数字的时间。

li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
same = False
for nbr in li:
    if li.count(nbr) > 1:
        same = True