在我正在處理的一些代碼中,我正在處理生成許多需要組合的單級深度嵌套迭代器。作為一個可行的解決方案,我已經(jīng)將這些部分中的每一個都封裝在了chain(*(one_level_nested))其中chain(來自廣受歡迎的itertools模塊)。然而,多次重復(fù)這個表達(dá)讓我覺得這個表達(dá)很丑陋,可能會被誤導(dǎo);作為一級深度生成代碼的一個例子,它們中的大多數(shù)都是按以下方式構(gòu)建的:[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 回答

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