【问题标题】:How to convert a deeply nested list to a string如何将深度嵌套的列表转换为字符串
【发布时间】:2018-07-22 17:03:54
【问题描述】:

如果我制作一个深度嵌套的列表,如下所示:

arr = [1]
for i in range(1000):
    arr = [arr]

然后

print(arr)

可以正常工作,但是

str(arr)

由于超出最大递归深度而惨遭失败。 ("%s" % arr,还有repr(arr)。)

我怎样才能得到 print 打印的字符串?造成这种差异的根本原因是什么?

【问题讨论】:

  • 我也遇到print 的 RecursionError。 repr(arr) 有效吗?
  • 不错。在 python 2.7 打印工作。正如您所提到的,在 3.5 中,它也会因 RecursionError 而失败。

标签: python recursion printing difference repr


【解决方案1】:

您可以增加recursion limit。但这种保护措施是有原因的。你确定这是你想要做的吗?

import sys

sys.setrecursionlimit(2000)

arr = [1]
for i in range(1000):
    arr = [arr]

str(arr)

【讨论】:

  • 我不敢用这样的代码。这只是纯粹的好奇。不知何故,python 2.7 中的 print 设法克服了最大递归问题。我想了解如何。当然不是随着递归限制的增加。
  • @vagoston,明白了。我把免责声明放在那里是为了阻止其他可能尝试相同的用户。我无法解释 Python 2.7 中的 print 差异。
【解决方案2】:

只是为了说明(其中一个)显而易见的:)(显然,我们也可以为列表以外的更多嵌套实例添加处理。)

arr = [1]
for i in range(1000):
  arr = [arr]

def showNested(arr):
  stack = [arr]
  s = ''

  while stack:
    curr = stack.pop()

    if isinstance(curr, list):
      s = s + '['
      stack.append(']')

      for v in curr:
        stack.append(v)

    else:
      s = s + str(curr)

  return s

输出:

print(showNested(arr)) # Python 3.6.1   Where's Waldo?
=> [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[1]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

【讨论】:

  • 好吧,既然你这么说,那就很明显了。剩下的只是一个修辞问题。为什么2.7 print和repr有区别。
  • @vagoston 抱歉,我忘了显示逗号 :) 可能需要多做一些工作......也许作为读者的练习?
猜你喜欢
  • 2016-02-08
  • 1970-01-01
  • 2021-11-25
  • 2019-04-24
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多