如何将深度嵌套的列表转换为字符串

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 抱歉,我忘了显示逗号 :) 可能需要多做一些工作......也许作为读者的练习?

以上是关于如何将深度嵌套的列表转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

Flatten嵌套字典-将列表元素转换为字符串

如何使用 PHP 将日期数组转换为 3 级嵌套列表

Pyspark 将列表列转换为嵌套结构列

将字符串转换为列表并嵌套在data.table中

将嵌套列表的单个元素从因子转换为字符

对熊猫数据框的深度嵌套 JSON 响应