如何删除列表中的重复值?

时间:2019-02-21 12:26:03

标签: python list

我有一个这样的列表:

 list_values=[("10",1),("10",2),("16",2),("16",1),("15",1)]

我希望结果为:

 Result=[("10",1),("16",2),("15",1)]

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:4)

看起来非常像How do you remove duplicates from a list whilst preserving order?,但只是“携带”第二个元素,没有将其包括在哈希/比较/任何内容中。

两种方法:

使用标记集记下第一个值的出现:

list_values=[("10",1),("10",2),("16",2),("16",1),("15",1)]

seen = set()

seen_add = seen.add

result = []
for k,v in list_values:
    if k not in seen:
        seen_add(k)
        result.append([k,v])

print(result)

收益(保留订单):

[['10', 1], ['16', 2], ['15', 1]]

或对逆向项目使用字典以仅保留第一个值:

result = list(dict(reversed(list_values)).items())

print(result)

收益(不保留订单):

[('15', 1), ('10', 1), ('16', 2)]

使用collections.OrderedDict并两次反转也可以保留顺序

import collections

result = list(reversed(list(collections.OrderedDict(reversed(list_values)).items())))

导致:

[('10', 1), ('16', 2), ('15', 1)]

那,除非使用Python 3.6+,否则字典将保留插入顺序。从python 3.5中,您可以删除一些强制列表转换,从而可以正常工作:

list(reversed(collections.OrderedDict(reversed(list_values)).items()))

答案 1 :(得分:1)

非常糟糕,OP无法尝试或不向我们展示一些解决方案,但是这里有一个简单的解决方案:

list_values = [("10",1),("10",2),("16",2),("16",1),("15",1)]
Result = list(dict(reversed(list_values)).items())
print(Result)

会给您:

[('15', 1), ('16', 2), ('10', 1)]