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

Python 将列表中的每个元素与所有其他元素进行比较,python,Python,是否有方法将列表中的所有元素(例如[4,3,2,1,4,3,2,1,4])与所有其他元素进行比较,并返回每个元素与之不同的其他元素的数量(例如,对于上面的[6,7,7,7,6,7,7,7,6])?然后我需要添加此列表中的数字。您可以使用count()方法获得类似的计数器。 然后减去总数。 用一个理解列表在一行中完成 >>> l = [4, 3, 2, 1, 4, 3, 2, 1, 4] >>> [ len(l)-l.count(i) for i in l ]

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

您可以使用
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]
在执行
[length-c[el]for el in li]
之前创建
c
比对列表中的每个元素i进行
count(i)
要好,因为这意味着
count()
多次进行相同的计数(每次遇到给定元素时,它都会对其进行计数)

顺便说一下,另一种写作方式:

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

您可以只使用
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
这样的函数仍然可以对它们进行迭代并生成所需的结果。但是,请注意,一旦您对生成器进行了一次迭代,就不能再对其进行迭代。

您所说的“添加此列表中的数字”是什么意思?你想对它们求和还是别的什么?我的意思是,从结果列表[6,7,7,7,6,7,7,7,6]中,我想加上6+7+7。。。。生成列表中元素的总和
>>> l = [4, 3, 2, 1, 4, 3, 2, 1, 4]
>>> length = len(l)
>>> print sum(length - l.count(i) for i in l)
60