2

在这里,数组有两个维度(字符和数字),我想通过只考虑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)的第二项,这是唯一的项目。

4

3 回答 3

2

您可以使用一来仅获取独特的项目。但首先您需要提取数字,您可以使用生成器表达式中的元组扩展来完成。

>>> 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)]
于 2013-09-02T02:30:31.413 回答
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)]
于 2013-09-02T03:33:24.867 回答
0

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

>>> print list(set([x[1] for x in myList]))
[0, 1]
于 2013-09-02T02:33:17.453 回答