将列表中的每个元素与其他元素进行比较

时间:2013-02-17 00:02:12

标签: python

有没有办法将列表的所有元素(例如[4,3,2,1,4,3,2,1,4]之类的元素)与所有其他元素进行比较,并为每个元素返回它不同的其他元素的数量(即,上面的列表[6,7,7,7,6,7,7,7,6])?然后我需要添加此列表中的数字。

4 个答案:

答案 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这样的函数仍然可以迭代它们并产生所需的结果。但请注意,一旦迭代生成器一次,就不能再次迭代它。