Python:计算对象列表中给定属性的不同值的数量

时间:2014-05-07 21:10:49

标签: python list count attributes

我有一个类C的对象列表。每个对象都有一个属性attrib。我想知道列表中attrib可以采用的不同值的数量。

这样可行,但它的长度为4行。有没有办法缩短它?更好?效率更高?

class C:
    def __init__(self, val):
        self.attrib = val

# my list of objects.
# attrib is either 0, 1 or 2 (so we have 3 different values) for any object in the list
objects = [C(x % 3) for x in xrange(10)] 


# Calculation :
tmpList = [] # temporary list to perform calculation
for o in objects:
    if o.attrib not in tmpList :
        tmpList.append(o.attrib)
print len(tmpList) # print 3

1 个答案:

答案 0 :(得分:1)

这是一个较短的版本:

len(set([x.attrib for x in objects]))

关于时间复杂度,您可以通过将tmpList更改为Set来将原始代码从O(n ^ 2)改进为O(n)。因为if o.attrib not in tmpList:是O(n)操作。