簡體   English   中英

如何確定嵌套列表中的所有元素是否唯一?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM