有没有一种方法可以比较列表中的所有元素(例如[4, 3, 2, 1, 4, 3, 2, 1, 4]),并返回每个元素与其他元素不同的数量(例如,对于上面的列表为[6, 7, 7, 7, 6, 7, 7, 7, 6])?然后我需要将这个列表中的数字相加。
有没有一种方法可以比较列表中的所有元素(例如[4, 3, 2, 1, 4, 3, 2, 1, 4]),并返回每个元素与其他元素不同的数量(例如,对于上面的列表为[6, 7, 7, 7, 6, 7, 7, 7, 6])?然后我需要将这个列表中的数字相加。
li = [4, 3, 2, 1, 4, 3, 2, 1, 4]
from collections import Counter
c = Counter(li)
print c
length = len(li)
print [length - c[el] for el in li]
[length - c[el] for el in li]
之前创建c
比对列表中每个元素i执行count(i)
更好,因为这意味着count()
会多次进行相同的计数(每次遇到给定元素时都会计数)。顺便说一句,另一种写法:map(lambda x: length-c[x] , li)
count()
方法得到类似的计数器。>>> l = [4, 3, 2, 1, 4, 3, 2, 1, 4]
>>> [ len(l)-l.count(i) for i in l ]
[6, 7, 7, 7, 6, 7, 7, 7, 6]
对于Python 2.7:
test = [4, 3, 2, 1, 4, 3, 2, 1, 4]
length = len(test)
print [length - test.count(x) for x in test]
sum
函数和生成器表达式。>>> l = [4, 3, 2, 1, 4, 3, 2, 1, 4]
>>> length = len(l)
>>> print sum(length - l.count(i) for i in l)
60
sum
这样的函数仍然可以遍历它们并产生所需的结果。请注意,一旦您对生成器进行了一次迭代,就无法再次迭代。