有没有办法将列表的所有元素(例如 [4, 3, 2, 1, 4, 3, 2, 1, 4])与所有其他元素进行比较,并为每个元素返回其他元素的数量不同的元素(即,对于上面的列表 [6, 7, 7, 7, 6, 7, 7, 7, 6])?然后我需要添加这个列表中的数字。
问问题
2316 次
4 回答
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)
于 2013-02-17T00:08:31.830 回答
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]
于 2013-02-17T00:07:01.113 回答
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]
于 2013-02-17T00:08:26.910 回答
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
仍然可以迭代它们并产生所需的结果。但是请注意,一旦您对生成器进行了一次迭代,就不能再次对其进行迭代。
于 2013-02-17T00:21:59.847 回答