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

时间:2013-09-02 02:24:31

标签: 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]] 

这是myList的唯一项目,尊重第二项,即数字(0和1)。

3 个答案:

答案 0 :(得分:2)

您可以使用set来获取唯一商品。但首先你需要提取数字,你可以使用generator expression中的元组扩展来完成。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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)]