在我正在處理的一些代碼中,我正在處理生成許多需要組合的單級深度嵌套迭代器。作為一個可行的解決方案,我已經將這些部分中的每一個都封裝在了chain(*(one_level_nested))其中chain(來自廣受歡迎的itertools模塊)。然而,多次重復這個表達讓我覺得這個表達很丑陋,可能會被誤導;作為一級深度生成代碼的一個例子,它們中的大多數都是按以下方式構建的:[j for j in something_needing_i(i)] for i in range(5)因此我最終得到chain(*([j for j in something_needing_i(i)] for i in range(5))).有沒有更好的方法,特別是在不解包的情況下生成迭代器并且具有可比的效率(或理想情況下,更好的效率)?
1 回答

莫回無
TA貢獻1865條經驗 獲得超7個贊
您可以只使用以下嵌套:
(j for i in range(5) for j in something_needing_i(i))
為了得到一個平面發電機。這也避免了虛假的中間列表以獲得更好的空間效率。
這兩個for
結構的順序一開始可能看起來違反直覺,因為與創建嵌套生成器/列表的順序相比,您必須改變它們。此外,它們的范圍不符合我的自然語言“感覺”,但這就是它們的工作方式。
添加回答
舉報
0/150
提交
取消