我有一个数组:x = [ [1, 2], 1, 1, [2, 1, [1, 2]] ]
其中我想计算数字 1
的每次出现次数,并将该数字存储在变量 one_counter
中。 x.count(1)
仅返回 2 次 1
,这是不够的。
我下面的代码满足了我的目的,并将 5
存储在 one_counter
中,但是它看起来很乱并且对我来说感觉不符合 pythonic。
有什么建议可以改进它的 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
最佳答案
你可以使用递归:
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
或者更简洁:
def flatten_count(iterable, element):
return sum(
flatten_count(item, element) if isinstance(item, list) else item == element
for item in iterable
)
像这样使用:
>>> x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
>>> print(flatten_count(x, 1))
5
关于Python - 在混合数组(整数、列表)中查找值的每次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7702036/