Python遍历列表并计算某个值的项目

Dar*_*ech 2 python

嗨我有一个python问题,我必须计算哪个列表元素包含值2,在具有不同级别的嵌套的列表中.例如:

my_list = [[2,3,2,2], [[2,1,2,1], [2,1,1]], [1,1,1]]
Run Code Online (Sandbox Code Playgroud)

此列表最多可以有三个嵌套级别,但也可以是两个或仅一个级别.

我有一些代码有用:

count = 0
for i in my_list:
    if len(i) > 1:
        for x in i:
            if 2 in x:
                count += 1
    elif i == 2:
        count += 1
Run Code Online (Sandbox Code Playgroud)

然而,除了是非常难看,这并没有考虑到潜在的对与这2也不起作用获得单个元素的列表len()上的单一int.

我知道列表理解应该能够解决这个问题,但我仍然坚持如何应对潜在的嵌套.

任何帮助将非常感激.

NPE*_*NPE 7

我将使用/sf/answers/151097271/flatten()生成器的变体

原始产生来自任意嵌套和不规则形状的迭代结构的每个元素.我的变体(下面)产生最里面的迭代,而不是产生标量.

from collections import Iterable

def flatten(l):
    for el in l:
        if isinstance(el, Iterable) and any(isinstance(subel, Iterable) for subel in el):
            for sub in flatten(el):
                yield sub
        else:
            yield el

my_list = [[2,3,2,2], [[2,1,2,1], [2,1,1]], [1,1,1]]
print(sum(1 for el in flatten(my_list) if 2 in el))
Run Code Online (Sandbox Code Playgroud)

为您的例子打印3.