从二维数组python中获取唯一项



这里,数组有两个维度(字符和数字),我想通过只考虑第二个维度来获得唯一的项,这是下面myList中的数字。我已经使用了一个额外的列表(a_list),但我正在寻找更好的方法。

myList=[]
myList.append(("a",0))
myList.append(("b",0))
myList.append(("b",0))
myList.append(("a",1))
myList.append(("a",1))
distinctmyList =[]
a_list=[]
for  i in myList:
    a_list.append(i[1])
distinctmyList.append(list(set(a_list)))
print distinctmyList

输出:

[[0, 1]] 

其是CCD_ 3的唯一项。

您可以使用一个集合来只获取唯一的项。但首先需要提取数字,这可以在生成器表达式中使用元组展开来实现。

>>> print set(number for character, number in myList)
set([0, 1])

更新

这是一个满足您更改的要求的版本。

>>> from collections import OrderedDict
>>> lst = [('a', 0), ('b', 0), ('b', 0), ('a', 2), ('a', 1), ('a', 1)]
>>> print list(reversed(OrderedDict((x[1], x) for x in reversed(lst)).values())) 
[('a', 0), ('a', 2), ('a', 1)]

您可以简单地执行类似的操作

print list(set(zip(*myList)[1]))

编辑:根据您在评论中的要求

myList=[]
myList.append(("a",0))
myList.append(("b",0))
myList.append(("b",0))
myList.append(("a",1))
myList.append(("a",1))
Dict = {}
for Data in myList :
    Dict.setdefault(Data[1], []).append(Data[0])
print [(values[0], key) for key, values in Dict.items()]

输出

[('a', 0), ('a', 1)]

EDIT1:保留订单的解决方案

myList=[]
myList.append(("a",0))
myList.append(("b",0))
myList.append(("b",0))
myList.append(("a",2))
myList.append(("a",1))
myList.append(("a",1))
Dict   = {}
Unique = []
for Data in myList :
    Dict.setdefault(Data[1], []).append(Data[0])
    if Data[1] not in Unique: Unique.append(Data[1])
print [(Dict[Data][0], Data) for Data in Unique]

输出

[('a', 0), ('a', 2), ('a', 1)]

希望您正在寻找这样的东西:

>>> print list(set([x[1] for x in myList]))
[0, 1]

最新更新