有没有办法将列表的所有元素(例如[4,3,2,1,4,3,2,1,4]之类的元素)与所有其他元素进行比较,并为每个元素返回它不同的其他元素的数量(即,上面的列表[6,7,7,7,6,7,7,7,6])?然后我需要添加此列表中的数字。
答案 0 :(得分:3)
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]
在执行c
之前创建[length - c[el] for el in li]
比为列表中的每个元素i执行count(i)
更好,因为这意味着count()
会多次执行相同的计数(每个它遇到一个给定元素的时间,它会计算它)
顺便说一句,另一种写作方式:
map(lambda x: length-c[x] , li)
答案 1 :(得分:2)
您可以使用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]
答案 2 :(得分:1)
对于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]
答案 3 :(得分:0)
您可以使用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
这样的函数仍然可以迭代它们并产生所需的结果。但请注意,一旦迭代生成器一次,就不能再次迭代它。