计算嵌套列表中的整数

时间:2014-03-14 11:34:58

标签: python

说我有一个列表[1, [2, 1], 1, [3, [1, 3]], [4, [1], 5], [1], 1, [[1]]] 我想计算列表中1的数量。我如何用.count做到这一点?无论如何要移除[],如enumerate(seq)移除()然后计算列表中的1的数量?

2 个答案:

答案 0 :(得分:4)

这可能不是最酷的方式,但它有效:

l=[1, [2, 1], 1, [3, [1, 3]], [4, [1], 5], [1], 1, [[1]]]
>>> from compiler.ast import flatten
>>> flatten(l).count(1)
8

这里,顾名思义,flatten()将嵌套列表转换为简单的单级列表。从结果列表中计算1的数量可以完成任务。

答案 1 :(得分:2)

您需要一个函数来遍历任意嵌套列表。那么计算是微不足道的。可以使用递归生成器完成遍历:

def traverse(val):
    if isinstance(val, list):
        for v in val:
            for x in traverse(v):
                yield x 
    else:
        yield val


>>> list(traverse([1, [2, 1], 1, [3, [1, 3]], [4, [1], 5], [1], 1, [[1]]]))
[1, 2, 1, 1, 3, 1, 3, 4, 1, 5, 1, 1, 1]

使用python 3.3中的新yield from语法,这个定义会更好,用它我们可以替换其中一个循环:

def traverse(val):
    if isinstance(val, list):
        for v in val:
            yield from traverse(v)
    else:
        yield val