Я думаю, что лучше разделить эту задачу на 2 части.
Часть 1
Часть 1 - создать генератор, который сгладит список ввода.
def flatten_list(L):
for i in L:
if isinstance(i,list):
for j in flatten_list(i):
yield j
else:
yield i
Проверка вывода:
x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
for i in flatten_list(x):
print i
Выход:
1
2
1
1
2
1
1
2
часть 2
Часть 2 - использовать плоский список для подсчета количества вхождений 1
в нем:
print(sum(i==1 for i in flatten_list(x)))
Выход:
5
Обратите внимание, что i==1
возвращает True
, если i=1
, и False
, если i
не равно 1
. Но True
равно 1
и False
равно 0
, поэтому sum
просто вычисляет количество True
случаев (что в данном случае равно 5
).