如何将深度嵌套的列表转换为字符串
Posted
技术标签:
【中文标题】如何将深度嵌套的列表转换为字符串【英文标题】: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 而失败。
【参考方案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 抱歉,我忘了显示逗号 :) 可能需要多做一些工作......也许作为读者的练习?以上是关于如何将深度嵌套的列表转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章