Sho*_*len 4 python arrays for-loop
我有一个数组:x = [ [1, 2], 1, 1, [2, 1, [1, 2]] ]
我想在其中计算每次出现的数字1,并将该数字存储在变量中one_counter.x.count(1)只返回2次1,这是不够的.
我下面的代码提供我的目的并存储5在one_counter,但它看起来凌乱,感觉unpythonic给我.
有什么建议我如何改进其pythonicity并将其扩展到更多维列表?
谢谢!
x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
one_counter = 0
for i in x:
if type(i) == list:
for j in i:
if type(j) == list:
for k in j:
if k == 1:
one_counter += 1
else:
if j == 1:
one_counter += 1
else:
if i == 1:
one_counter += 1
Run Code Online (Sandbox Code Playgroud)
你可以使用递归:
def flatten_count(iterable, element):
count = 0
for item in iterable:
if item == element:
count += 1
if isinstance(item, list):
count += flatten_count(item, element)
return count
Run Code Online (Sandbox Code Playgroud)
或者更简洁:
def flatten_count(iterable, element):
return sum(
flatten_count(item, element) if isinstance(item, list) else item == element
for item in iterable
)
Run Code Online (Sandbox Code Playgroud)
使用这样:
>>> x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
>>> print(flatten_count(x, 1))
5
Run Code Online (Sandbox Code Playgroud)