首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除嵌套列表中的重复项(不删除子列表中的重复元素)

删除嵌套列表中的重复项(不删除子列表中的重复元素)
EN

Stack Overflow用户
提问于 2017-09-10 07:16:17
回答 2查看 239关注 0票数 1

我正在尝试从一个嵌套列表中删除重复的子列表,如下所示:

代码语言:javascript
复制
result_set = [
    ['MEMS', 'MEMS', 'MEMS', 'MEMS'],
    ['Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics'],
    ['Microfabrication', 'Microfabrication', 'Microfabrication', 'Clean-Room Microfabrication', 'Microfabrication', 'Microfabrication'],
    ['Photolithography', 'Photolithography', 'Lithography', 'Photolithography'],
    ['MEMS', 'MEMS', 'MEMS', 'MEMS']
    ]

我想要的输出如下:

代码语言:javascript
复制
result_set = [
    ['MEMS', 'MEMS', 'MEMS', 'MEMS'],
    ['Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics'],
    ['Microfabrication', 'Microfabrication', 'Microfabrication', 'Clean-Room Microfabrication', 'Microfabrication', 'Microfabrication'],
    ['Photolithography', 'Photolithography', 'Lithography', 'Photolithography']
    ]

请注意,基本上最后一个元素'MEMS','MEMS‘不再存在。我问过Similar questions了,我从那里改编了以下代码:

代码语言:javascript
复制
result_set = set(frozenset(x) for x in result)
lst = [list(x) for x in result_set]

我的问题是我得到了以下输出:

代码语言:javascript
复制
 result_set = [['MEMS'], ['Microfluidics'], ['Microfabrication', 'Clean-Room Microfabrication'], ['Photolithography', 'Lithography']]

请注意,它还删除了子列表中的重复元素。我不想这样,因为我之后的目标是绘制直方图。例如,->微电子机械系统有4种电流。因此,我希望跟踪每个子列表最初拥有的元素数量。

EN

回答 2

Stack Overflow用户

发布于 2017-09-10 07:18:25

如果顺序无关紧要,您可以使用set

代码语言:javascript
复制
final_data = list(map(list, set(map(tuple, result_set))))

输出:

代码语言:javascript
复制
[['Microfabrication', 'Microfabrication', 'Microfabrication', 'Clean-Room Microfabrication', 'Microfabrication', 'Microfabrication'], ['Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics'], ['Photolithography', 'Photolithography', 'Lithography', 'Photolithography'], ['MEMS', 'MEMS', 'MEMS', 'MEMS']]

如果顺序很重要,你可以尝试这样做:

代码语言:javascript
复制
final_data = []
for result in result_set:
    if result not in final_data:
         final_data.append(result)

输出:

代码语言:javascript
复制
[['MEMS', 'MEMS', 'MEMS', 'MEMS'], ['Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics'], ['Microfabrication', 'Microfabrication', 'Microfabrication', 'Clean-Room Microfabrication', 'Microfabrication', 'Microfabrication'], ['Photolithography', 'Photolithography', 'Lithography', 'Photolithography']]
票数 3
EN

Stack Overflow用户

发布于 2017-09-10 12:13:19

对列表进行排序,然后使用itertools.groupby()生成的键创建一个新列表。

代码语言:javascript
复制
import itertools
result_set.sort()
new_set = [k for k,g in itertools.groupby(result_set)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46135945

复制
相关文章

相似问题

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