Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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_List_Set_Unique - Fatal编程技术网

Python 从二维列表中获取唯一元素

Python 从二维列表中获取唯一元素,python,list,set,unique,Python,List,Set,Unique,我创建了一个2D列表,如下所示: Z1=[[0代表范围3中的x]代表范围4中的y] 然后我继续填充此列表,使Z1如下所示: [1,2,3],[4,5,6],[2,3,1],[2,5,1]] 我需要提取Z1的独特1x3元素,不考虑顺序: Z2=使唯一性Z1成为解决方案 Z2的内容应如下所示: [4,5,6],[2,5,1]] 正如你所看到的,我认为[1, 2, 3 ]和[2, 3, 1 ]是重复的,因为我不关心顺序。 还要注意,单个数值可能在元素之间出现多次,例如[2,3,1]和[2,5,1];只

我创建了一个2D列表,如下所示:

Z1=[[0代表范围3中的x]代表范围4中的y]

然后我继续填充此列表,使Z1如下所示:

[1,2,3],[4,5,6],[2,3,1],[2,5,1]]

我需要提取Z1的独特1x3元素,不考虑顺序:

Z2=使唯一性Z1成为解决方案

Z2的内容应如下所示:

[4,5,6],[2,5,1]]

正如你所看到的,我认为[1, 2, 3 ]和[2, 3, 1 ]是重复的,因为我不关心顺序。

还要注意,单个数值可能在元素之间出现多次,例如[2,3,1]和[2,5,1];只有当所有的三个值以相同或不同的顺序出现在一起时,我才会认为它们是重复的。< /P> 我搜索了几十个类似的问题,但似乎没有一个能解决我的确切问题。我是一个完全的Python初学者,所以我只需要朝着正确的方向努力

我已经试过:

Z2=dictx[0],x代表Z1.0中的x Z2=j中j的设定值,Z2为j中i的设定值

但这并没有产生预期的行为

非常感谢你的帮助


Louis Vallance

如果子列表中元素的顺序无关紧要,则可以使用以下命令:

from collections import Counter

z1 = [[1, 2, 3], [4, 5, 6], [2, 3, 1], [2, 5, 1]]

temp = Counter([tuple(sorted(x)) for x in z1])

z2 = [list(k) for k, v in temp.items() if v == 1]
print(z2)  # [[4, 5, 6], [1, 2, 5]]
一些评论:

排序使示例中的列表[1,2,3]和[2,3,1]相等,因此它们按计数器分组 转换为元组将列表转换为可散列的内容,因此可以用作字典键。 计数器创建一个dict,上面创建的元组作为键,其值等于它们在原始列表中出现的次数 最终的列表理解从计数器字典中获取所有计数为1的键。 如果订单不重要,您可以使用以下选项:

z1 = [[1, 2, 3], [4, 5, 6], [2, 3, 1], [2, 5, 1]]

def test(sublist, list_):
    for sub in list_:
        if all(x in sub for x in sublist):
            return False
    return True

z2 = [x for i, x in enumerate(z1) if test(x, z1[:i] + z1[i+1:])]
print(z2)  # [[4, 5, 6], [2, 5, 1]]

欢迎看起来你想让我们为你写些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是包括您迄今为止编写的代码、示例输入(如果有)、预期输出以及您实际获得的控制台输出、回溯等。。你提供的细节越多,你可能得到的答案就越多。检查和。