比较列表中每个元素与其他元素

3 投票
4 回答
2393 浏览
提问于 2025-04-17 16:08

有没有办法比较一个列表中的所有元素(比如像[4, 3, 2, 1, 4, 3, 2, 1, 4]这样的列表),然后返回每个元素与其他元素不同的数量(比如,对于上面的列表,结果是[6, 7, 7, 7, 6, 7, 7, 7, 6])?接下来,我还需要把这个结果列表中的数字加起来。

4 个回答

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]
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]
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]

在执行 [length - c[el] for el in li] 之前先创建 c,比对列表中每个元素使用 count(i) 要好。这是因为使用 count() 会对同一个元素进行多次计数(每次遇到某个元素时,它都会重新计数)。

顺便提一下,还有另一种写法:

map(lambda x: length-c[x] , li)

撰写回答