[英]check identical for list in list(python)
我想检查列表列表中是否没有相同的条目。 如果没有相同的匹配项,则返回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],然后检查
感谢您编辑问题并为我提供帮助!
>>> 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
我们可以使用itertools.chain.from_iterable并设置内置函数。
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
您可以使用具有交集方法的集合来查找哪些元素是常见的
将每个子列表的所有元素放在单独的列表中。 如果该单独的列表有重复项(请调用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
我认为您可以整理列表并计算其中的元素,然后将其与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
根据您的数据,您可能不想查看所有元素,这是一个解决方案,一旦您找到第一个重复项,它就会返回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
如果列表中的一个数字出现多次,则此方法将使布尔变量“ same”变为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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.