首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在列表中查找重复嵌套列表

在列表中查找重复嵌套列表
EN

Stack Overflow用户
提问于 2022-11-11 05:10:36
回答 2查看 26关注 0票数 -2
代码语言:javascript
复制
[[1.0, 1.0], [1.0, 10.0], [1.0, 11.0], [1.0, 12.0], [1.0, 13.0]],
 [[2.0, 1.0], [2.0, 10.0], [2.0, 11.0], [2.0, 12.0], [2.0, 13.0]],
 [[3.0, 1.0], [3.0, 10.0], [3.0, 11.0], [3.0, 12.0], [3.0, 13.0]],
 [[4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]],
 [[4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]]]

如果我有这样的列表,如何将重复的行作为不同的组返回?

我不知道当两个列表中有子列表时,如何比较它们是否相同。

对于这个问题,理想的输出是:

[ 4.0、1.0、4.0、10.0、4.0、11.0、4.0、12.0、4.0、13.0]

[4.0、1.0、4.0、10.0、4.0、11.0、4.0、12.0、4.0、13.0]

EN

回答 2

Stack Overflow用户

发布于 2022-11-11 05:58:55

您希望对数据进行排序,并使每一行都成为元组,以便能够对其进行分组。然后检查是否有多个元素->重复的组。

输入:

代码语言:javascript
复制
ll = [[[1.0, 1.0], [1.0, 10.0], [1.0, 11.0], [1.0, 12.0], [1.0, 13.0]],
 [[2.0, 1.0], [2.0, 10.0], [2.0, 11.0], [2.0, 12.0], [2.0, 13.0]],
 [[3.0, 1.0], [3.0, 10.0], [3.0, 11.0], [3.0, 12.0], [3.0, 13.0]],
 [[4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]],
 [[4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]]]
代码语言:javascript
复制
import itertools
l = [tuple(sorted(lst)) for lst in ll]

out = []
for k, g in itertools.groupby(l):
    g = list(g)
    if len(g)>1:
        out.append(g)

print(out)
代码语言:javascript
复制
[[([4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]),
  ([4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0])]]

或者作为一条线:

代码语言:javascript
复制
out = list(filter(lambda s: len(s) > 1, [list(g) for k, g in itertools.groupby([tuple(sorted(lst)) for lst in ll])]))
票数 0
EN

Stack Overflow用户

发布于 2022-11-11 05:59:47

您可以找到计数大于1的所有嵌套元素,然后将它们保存在列表理解中。

代码语言:javascript
复制
l=[[[1.0, 1.0], [1.0, 10.0], [1.0, 11.0], [1.0, 12.0], [1.0, 13.0]],
 [[2.0, 1.0], [2.0, 10.0], [2.0, 11.0], [2.0, 12.0], [2.0, 13.0]],
 [[3.0, 1.0], [3.0, 10.0], [3.0, 11.0], [3.0, 12.0], [3.0, 13.0]],
 [[4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]],
 [[4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]]]

[x for x in l if l.count(x)>1]

#output
[[[4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]],
[[4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74398250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档