亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

避免生成嵌套迭代器然后立即解包

避免生成嵌套迭代器然后立即解包

翻閱古今 2021-07-22 16:02:50
在我正在處理的一些代碼中,我正在處理生成許多需要組合的單級深度嵌套迭代器。作為一個可行的解決方案,我已經將這些部分中的每一個都封裝在了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結構的順序一開始可能看起來違反直覺,因為與創建嵌套生成器/列表的順序相比,您必須改變它們。此外,它們的范圍不符合我的自然語言“感覺”,但這就是它們的工作方式。


查看完整回答
反對 回復 2021-07-28
  • 1 回答
  • 0 關注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號