Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何确定嵌套列表中的所有元素是否唯一?_Python_Python 3.x_List_Nested_Duplicates - Fatal编程技术网

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