Python 从二维列表中获取唯一元素
我创建了一个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]]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];只
正如你所看到的,我认为[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]]
欢迎看起来你想让我们为你写些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是包括您迄今为止编写的代码、示例输入(如果有)、预期输出以及您实际获得的控制台输出、回溯等。。你提供的细节越多,你可能得到的答案就越多。检查和。