[英]How to determine if all elements in a nested list are unique?
我是這里的初學者,真的可以使用一些幫助。
我必須確定二維列表中的所有元素是否都是唯一的。 例如,如果給定一個二維列表my_list = [[1,2,2],[4,5,2],[7,2,9]]
,我必須寫一個代碼,“這個list 沒有所有唯一元素”,因為有多個 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_list 的第一個列表中的重復 2,但不能檢測到第二個列表中的重復項。
您需要展平列表列表並查找重復項。 您可以使用itertools.chain.from_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')
編輯:使用 for 循環而不展平
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
首先,收集一個列表中的所有元素:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.