Python 如何确定嵌套列表中的所有元素是否唯一?
我是这里的初学者,真的需要一些帮助 我必须确定二维列表中的所有元素是否唯一。例如,如果给定一个二维列表Python 如何确定嵌套列表中的所有元素是否唯一?,python,python-3.x,list,nested,duplicates,Python,Python 3.x,List,Nested,Duplicates,我是这里的初学者,真的需要一些帮助 我必须确定二维列表中的所有元素是否唯一。例如,如果给定一个二维列表my_list=[[1,2,2],[4,5,2],[7,2,9],我必须编写一个代码,因为有多个2,所以会说,“这个列表没有所有唯一的元素”。我必须使用嵌套循环编写代码 以下是我到目前为止的情况: my_list = [[1,2,2],[4,5,2],[7,2,9]] for row in my_list: for num in row:
my_list=[[1,2,2],[4,5,2],[7,2,9]
,我必须编写一个代码,因为有多个2,所以会说,“这个列表没有所有唯一的元素”。我必须使用嵌套循环编写代码
以下是我到目前为止的情况:
my_list = [[1,2,2],[4,5,2],[7,2,9]]
for row in my_list:
for num in row:
if row.count(num) > 1:
print("Duplicate")
else:
print("No duplicate", num)
此代码可以检测my_列表第一个列表中的重复2,但不能检测第二个列表。首先,收集一个列表中的所有元素:
all_elements = [y for x in liste for y in x]
要检查所有元素是否唯一,请执行以下操作:
len(all_elements) == len(set(all_elements))
对于非唯一元素的列表:
list(set([x for x in all_elements if all_elements.count(x)!=1]))
但是如果您坚持使用嵌套循环,您仍然需要为此检查保留一个唯一的列表。例如:
my_list = [[1,2,2],[4,5,2],[7,2,9]]
uniques = []
for row in my_list:
for num in row:
if num in uniques:
print("Duplicate",num)
else:
print("No duplicate", num)
uniques.append(num)
输出:
No duplicate 1
No duplicate 2
Duplicate 2
No duplicate 4
No duplicate 5
Duplicate 2
No duplicate 7
Duplicate 2
No duplicate 9
您需要展平列表并查找重复项。您可以使用
itertools.chain.from\u iterable
from itertools import chain
my_list = [[1,2,2],[4,5,2],[7,2,9]]
flat=list(chain.from_iterable(my_list)
if len(flat)==len(set(flat)):
print('No dups')
else:
print('Dups found')
编辑:用于不展平的循环
count={}
dups=False
for lst in my_list:
for k in lst:
count[k]=count.setdefault(k,0)+1
if count[k]>1:
dups=True
break
if dups:
print("dups found")
break
else:
print('No dups')
要在不首先展平列表列表的情况下执行此操作,可以使用一个集合来跟踪已“看到”的项目,以便在迭代中的当前项目已在集合中时,可以确定是否存在重复项:
seen = set()
for sublist in my_list:
for item in sublist:
if item in seen:
print('Duplicate')
break
seen.add(item)
else:
continue
break
else:
print('No duplicate')
如果需要一个函数来检查二维数组/列表是否具有仅嵌套循环的重复项:
def two_dim_list_has_duplicates(my_list):
unique = set()
for item in my_list:
for i in item:
if i in unique:
return True
seen.add(item)
return False
感谢Yusuf,有没有办法不转换为一个列表而使用嵌套循环来编写此代码?如果不将嵌套列表转换为一个列表并使用嵌套循环,我将如何编写此代码?这是因为第1行和第2行中没有重复项。所以它打印“无重复”。行0有重复项。感谢Ch3steR,有没有办法在不展平列表的情况下编写此代码,而改为使用嵌套循环?注意:这种方法比我的字典方法更好。+1