我刚刚学习了 Python 中的递归并完成了作业,其中一项作业是计算任意嵌套列表中的所有元素。我搜索了这个网站,发现的答案似乎都使用递归调用。既然已经教导任何可以递归表达的东西都可以迭代表达,并且在 Python 中迭代是首选,那么在 Python 2.6 中如果没有递归或导入模块(作为学习练习),如何实现这一点? (嵌套列表本身将被算作一个元素,它的内容也是如此。) 例如:
>>> def element_count(p):
... count = 0
... for entry in p:
... count += 1
... if isinstance(entry, list):
... count += element_count(entry)
... return count
>>> print element_count([1, [], 3])
3
>>> print element_count([1, [1, 2, [3, 4]]])
7
>>> print element_count([[[[[[[[1, 2, 3]]]]]]]])
10
这将如何使用迭代来编写?
最佳答案
这是一种方法:
def element_count(p):
q = p[:]
count = 0
while q:
entry = q.pop()
if isinstance(entry, list):
q += entry
count += 1
return count
print element_count([1, [], 3])
print element_count([1, [1, 2, [3, 4]]])
print element_count([[[[[[[[1, 2, 3]]]]]]]])
代码维护了一个要查看的事物队列。每当循环遇到子列表时,它会将其内容添加到队列中。
关于python - 在没有递归的情况下计算任意嵌套列表列表中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10584873/