python - 在没有递归的情况下计算任意嵌套列表列表中的所有元素

标签 python recursion iteration

我刚刚学习了 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/

相关文章:

python - Tensorflow:难以置信的巨大稀疏分类交叉熵

python - Python 3.2 中的递归

arrays - 使用迭代器而不是 Swift 中的位置访问数组的元素

javascript - 带动态参数的递归

python - 我需要帮助迭代列表列表,通过一个函数

java - 如何通过鼠标单击启用一个 JButton,然后通过迭代禁用所有其他 JButton?

Python:如何干净地关闭套接字以避免 'can not assign requested address' 错误(高频)

python - matplotlib 如何指定时间定位器的开始滴答时间戳?

python - 循环遍历目录以查找匹配的文件

java - 如何递归删除