从2D列表中获取唯一元素

2024-09-28 17:00:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个二维列表,我创建如下:

Z1 = [[0 for x in range(3)] for y in range(4)]

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

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

我需要提取Z1唯一1x3元素,而不考虑顺序:

Z2 = makeUnique(Z1) # The solution

Z2的内容应如下所示:

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

如您所见,我认为[1, 2, 3]和{}是重复的,因为我不关心顺序。在

还要注意,单个数值可能在元素中出现多次(例如[2, 3, 1][2, 5, 1]);只有当所有三个值同时出现(以相同或不同的顺序)时,我才认为它们是重复的。在

我搜索了几十个类似的问题,但似乎没有一个能解决我的确切问题。我是一个完全的Python初学者,所以我只需要朝着正确的方向努力。在

我已经试过了:

Z2= dict((x[0], x) for x in Z1).values()Z2= set(i for j in Z2 for i in j)

但这并不能产生期望的行为。在

非常感谢你的帮助!在

路易斯瓦尔斯


Tags: thein元素内容列表for顺序range
1条回答
网友
1楼 · 发布于 2024-09-28 17:00:28

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

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]和{}相等,因此它们按Counter分组
  • casting to tuplelist转换为可散列的内容,因此可以用作dictionary键。在
  • Counter创建一个dict,上面创建的tuple作为键,值等于它们在原始list中出现的次数
  • 最后一个list-comprehensionCounter dictionary中获取计数为1的所有键。在

如果顺序重要,可以使用以下方法代替:

^{pr2}$

相关问题 更多 >