计数 list/tuple 个不同于变量的元素?

Count list/tuple elements which are different than variable?

我有列表 or/and 元组:

MyVar = [0,0,0,0,1,0,0,0,0]

我想计算其中与 0 不同的元素。

怎么做?

你可以试试:

>>> len(filter(lambda x: x != 0, MyVar))
1

试试 filter():

>>> my_var = [0, 0, 0, 0, 1, 0, 0, 0, 0]
>>> result = filter(lambda x: x > 0, my_var)
[1]
>>> print(len(result))
1

获取所有非0元素的子列表长度

MyVar = [0,0,0,0,1,0,0,0,0]
len([x for x in MyVar if x != 0])
>> 1

无需生成列表,只需:

len(MyVar) - MyVar.count(0)

不如上面的任何答案有效,但仍然简单直接

myVar = [0,0,0,0,1,0,0,0,0]
count = 0

for var in myVar:
    if var != 0:
        count += 1

以下应该有效:

>>> MyVar = [0,0,0,0,1,0,0,0,0]
>>> sum(map(bool, MyVar))
1

它会将列表转换为布尔值列表,如果元素不为零,则值为 True。然后它将通过隐式考虑 True 具有值 1 和 False 具有值 0.

来对所有元素求和

您可以对不需要任何中间列表或不必要的算术运算的条件生成器表达式执行 sum:

>>> sum(1 for element in MyVar if element != 0)
1

或者正如@Jean-François Fabre 指出的那样:

>>> sum(1 for element in MyVar if element)
1

如果 MyVar 包含数字,则计算非零值的数量。

使用来自 functools 的 reduce:

from functools import reduce

reduce((lambda x, y: x + (y>0)), MyVar, 0)
f = sum([1 for x in MyVar if x!= 0])

一行:)

使用迭代器的和:

sum(x != 0 for x in MyVar)