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