嗨我有一个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.
我知道列表理解应该能够解决这个问题,但我仍然坚持如何应对潜在的嵌套.
任何帮助将非常感激.
我将使用/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.
| 归档时间: |
|
| 查看次数: |
1527 次 |
| 最近记录: |