我有一个类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
答案 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)操作。