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

Python 如何删除列表列表中的重复值?,python,list,Python,List,我有这样一份清单: list_values=[("10",1),("10",2),("16",2),("16",1),("15",1)] 我希望结果如下: Result=[("10",1),("16",2),("15",1)] 有人能帮我吗?很遗憾,OP没有尝试或没有向我们展示一些解决方案,但这里有一个简单的解决方案: list_values = [("10",1),("10",2),("16",2),("16",1),("15",1)] Result = list(dict(rever

我有这样一份清单:

 list_values=[("10",1),("10",2),("16",2),("16",1),("15",1)]
我希望结果如下:

 Result=[("10",1),("16",2),("15",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)]

很糟糕,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)]
看起来很像,但只携带第二个元素,不包括在散列/比较/任何内容中

有两种方法:

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

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()))
看起来很像,但只携带第二个元素,不包括在散列/比较/任何内容中

有两种方法:

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

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()))


到目前为止,您尝试了什么?根据哪个标准,您决定删除10,2和16,1?可能是第一次删除。使用标记集或通过向后迭代创建dict。listdictreversedlist_values.itemsdictionary仍将丢弃订单。所以,这取决于OP是否想要保留原始顺序。到目前为止,您尝试了什么?根据哪个标准,您决定删除10,2和16,1?可能是第一次出现。使用标记集或通过向后迭代创建dict。listdictreversedlist_values.itemsdictionary仍将丢弃订单。所以这取决于OP是否想要保留原始顺序。你能告诉我们,为什么他想要16,2为什么不16,1,10,2也是一样吗?刚在列表中第一次出现就意味着他的逻辑是独一无二的。你能告诉我们,为什么他想要16,2为什么不是16,1,同样的10,1,10,2。刚刚在列表中第一次出现,意味着他的逻辑独特。这非常吸引人!OrdredICT是可逆的,不需要任何列表调用。还将与Py 3.8listreversedcollections.OrderedDictreversedlist_values.items中的常规dict一起工作。我是说是的。以上错误不适用于我。dict和dict_项目不是sequencesit是Py 3.5的新项目这非常吸引人!OrdredICT是可逆的,不需要任何列表调用。还将与Py 3.8listreversedcollections.OrderedDictreversedlist_values.items中的常规dict一起工作。我是说是的。以上错误不适用于我。dict和dict_项不是sequencesit是Py 3.5的新项