【问题标题】:count number of elements with a list that also contains a list计算包含列表的元素的数量
【发布时间】:2014-12-27 15:15:06
【问题描述】:
>>> a = [1, 2, [3, 4], 5]
>>> print(len(a))
4

列表的长度是4,为什么元素数是4而不是5?

【问题讨论】:

  • @nbro 不必刻薄
  • @meda mean?谁?没听说过开玩笑?如果我不是,我总是在开玩笑。
  • 我们在学习一些新东西时都会这样想。
  • @Python_rookie:nbro 是个巨魔,请忽略那些 cmets。我已经标记了它们,它们在这里是不可接受的。见stackoverflow.com/help/be-nice
  • @nbro,对你来说可能是初级的。如果它是重复的,请将链接发布到重复的问题。这比问某人是否 10 岁等更有帮助......无论如何,这就是我要说的。节日快乐。 :)

标签: python list element


【解决方案1】:

外部列表中的元素计数为 4。a[2]一个对象。在这里,一个对象也是一个列表并不重要。

如果你需要递归地计算元素个数,那就自己动手吧:

def recursive_element_count(ob):
    if isinstance(ob, list):
        return sum(recursive_element_count(elem) for elem in ob)
    # anything that isn't a list counts as one element
    return 1

演示:

>>> def recursive_element_count(ob):
...     if isinstance(ob, list):
...         return sum(recursive_element_count(elem) for elem in ob)
...     return 1
... 
>>> a = [1, 2, [3, 4], 5]
>>> recursive_element_count(a)
5

【讨论】:

  • @MartijnPieters 为什么在最后加上return 1
  • @AvinashRaj:因为每个非列表元素都算作一项。
【解决方案2】:

你知道数学中的集合吗?这在 Python、lists-tuples-sets 等中是类似的。如果 list 中存在列表或 tuple 中存在 tuple 等。它们是一个元素。

a=[1,2,3]
b=[2,3]
a.append(b)
print (a)
print (len(a))

输出:

>>> 
[1, 2, 3, [2, 3]]
4
>>> 

那是因为 len(a)=4。 [2,3] 是list(a) 的一个元素。

【讨论】:

    【解决方案3】:

    由于内部列表假定为一个对象,len 返回 4 。您可以使用以下代码计算所有元素的长度:

    >>> a = [1, 2, [3, 4], 5]
    >>> sum(len(i) if isinstance(i,list) else 1 for i in a)
    5
    

    isinstance() 用于检查对象类型的函数。

    【讨论】:

    • @MartijnPieters 是的,当然,我们可以使用另一个杠杆的递归函数来做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-02-03
    • 2015-04-20
    • 2021-03-09
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多