在我的 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)
最后一次呼叫時只回傳非串列項?我不確定出了什么問題以及我對遞回的理解失敗的地方。
uj5u.com熱心網友回復:
字串和位元組是可迭代的。具體來說,字串在迭代時產生長度為 1 的字串。
這意味著您的代碼會無限遞回。
此外,您的函式不回傳任何內容。
這是我的建議,它使flattenme生成器不拆分字串:
array = [[1,2,3,['a','b','c'],4],'d', [5,6],[7],8,9]
def flattenme (iteritem):
for item in iteritem:
if isinstance(item, Iterable) and not isinstance(item, (str,bytes)):
yield from flattenme(item)
else:
yield item
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/356410.html
