【发布时间】:2021-11-06 23:58:11
【问题描述】:
在我的 python 旅程和一般编码中相对较早。我遇到了一个示例问题,该问题要求将列表列表展平。现在我不知道有多少列表列表。这导致我进行第一次递归尝试:
array = [[1,2,3,['a','b','c'],4],'d', [5,6],[7],8,9]
flattened = []
def flattenme (iteritem):
for item in iteritem:
if isinstance(item, Iterable) or isinstance(item, (str,bytes)):
flattenme(item)
else:
flattened.append(item)
当我运行它时
print(f"flatten method: {list(flattenme(array))}")
我得到错误:
RecursionError: 比较中超出了最大递归深度
不应该
flattenme(item)
在最后一次调用时只返回非列表项?我不确定出了什么问题以及我对递归的理解失败的地方。
【问题讨论】:
-
如果项目是一个字符串,你应该附加它。不再调用该函数...
-
字符串在迭代时会产生更小的字符串。如果你提供一个字符串,那么你永远不会到达“底部”。 Python 没有
char类型。 -
括号太多。代码根本不运行
-
flattened未定义。 -
该方法不返回任何内容,因此无法打印。