代码之家  ›  专栏  ›  技术社区  ›  Marek Grzyb

统计与变量不同的列表/元组元素?

  •  3
  • Marek Grzyb  · 技术社区  · 7 年前

    我有列表或/和元组:

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

    0 .

    10 回复  |  直到 7 年前
        1
  •  9
  •   Grisha S    7 年前

    无需生成列表,只需:

    len(MyVar) - MyVar.count(0)
    
        2
  •  3
  •   AlanK    7 年前

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

    MyVar = [0,0,0,0,1,0,0,0,0]
    len([x for x in MyVar if x != 0])
    >> 1
    
        3
  •  2
  •   JuniorCompressor    7 年前

    以下各项应起作用:

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

    它会将列表转换为布尔值列表 True 当元素为非零时。然后它将通过隐式考虑 具有值1和 False

        4
  •  2
  •   o-90    7 年前

    >>> len(filter(lambda x: x != 0, MyVar))
    1
    
        5
  •  1
  •   MSeifert    7 年前

    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

        6
  •  1
  •   wencakisa    7 年前

    尝试使用 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
    
        7
  •  0
  •   edm2282    7 年前

    myVar = [0,0,0,0,1,0,0,0,0]
    count = 0
    
    for var in myVar:
        if var != 0:
            count += 1
    
        8
  •  0
  •   user2314737    7 年前

    具有 reduce 从functools:

    from functools import reduce
    
    reduce((lambda x, y: x + (y>0)), MyVar, 0)
    
        9
  •  0
  •   PYA    7 年前
    f = sum([1 for x in MyVar if x!= 0])
    

        10
  •  0
  •   Jonas Adler    7 年前

    sum(x != 0 for x in MyVar)