替换列表列中的重复项

2024-04-18 17:21:57 发布

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

我得到了一个列表,在一列(最后一列)中是一个逗号分隔的项目字符串:

temp = ['AAA', 'BBB', 'CCC-DDD', 'EE,FFF,FFF,EE']

现在我要删除该列中的重复项。你知道吗

我试着把每一列都列出来:

    e = [s.split(',') for s in temp]
    print e

这给了我:

[['AAA'], ['BBB'], ['CCC-DDD'], ['EE', 'FFF', 'FFF', 'EE']]

现在我尝试用以下方法删除重复项:

    y = list(set(e))
    print y

什么结果出错了

TypeError: unhashable type: 'list'

我很感激任何帮助。你知道吗

编辑:

我没说最终结果是什么。清单应该是这样的

temp = ['AAA', 'BBB', 'CCC-DDD', 'EE', 'FFF']

最后一列应该删除重复项。你知道吗


Tags: 项目字符串列表forffftempeelist
3条回答
 a = ['AAA', 'BBB', 'CCC-DDD', 'EE,FFF,FFF,EE']
 b = [s.split(',') for s in a]
 c = []
 for i in b:
     c = c + i
 c = list(set(c))

 ['EE', 'FFF', 'AAA', 'BBB', 'CCC-DDD']

在列表的元素上应用set,而不是在列表的列表上。您希望set包含每个列表的字符串,而不是列表。你知道吗

e = [list(set(x)) for x in e]

你也可以直接做:

e = [list(set(s.split(','))) for s in temp]

>>> e
[['AAA'], ['BBB'], ['CCC-DDD'], ['EE', 'FFF']]

您可能需要sorted(set(s.split(',')))来确保字典顺序(集合没有顺序,even in python 3.7

对于平面有序列表,请创建平面集并对其排序:

e = sorted({x for s in temp for x in s.split(',')})

结果:

['AAA', 'BBB', 'CCC-DDD', 'EE', 'FFF']

这是一个使用itertools.chain方法的解决方案

import itertools

temp = ['AAA', 'BBB', 'CCC-DDD', 'EE,FFF,FFF,EE']
y = list(set(itertools.chain(*[s.split(',') for s in temp])))
# ['EE', 'FFF', 'AAA', 'BBB', 'CCC-DDD']

相关问题 更多 >