可能重複:
Flatten (an irregular) list of lists in Python壓扁在Python混合列表(含iterables和noniterables)
我怎麼會去壓扁Python中同時包含iterables和noniterables列表,例如作爲[1,[2,3,4],5,[6]]?結果應該是[1,2,3,4,5,6],列表(等等)的列表肯定不會發生。
我已經嘗試過使用itertools.chain等,但他們似乎只能在清單列表上工作。幫幫我!
可能重複:
Flatten (an irregular) list of lists in Python壓扁在Python混合列表(含iterables和noniterables)
我怎麼會去壓扁Python中同時包含iterables和noniterables列表,例如作爲[1,[2,3,4],5,[6]]?結果應該是[1,2,3,4,5,6],列表(等等)的列表肯定不會發生。
我已經嘗試過使用itertools.chain等,但他們似乎只能在清單列表上工作。幫幫我!
所以你只想平坦化1或2個層次,而不是遞歸到更深層次;並且只能在列表中,而不是其他迭代,比如字符串,元組,陣列......我是否確定了你的規格?好的,如果是的話,那麼...:
def flat2gen(alist):
for item in alist:
if isinstance(item, list):
for subitem in item: yield subitem
else:
yield item
如果你想要一個列表結果,list(flat2gen(mylist))
會產生它。
希望這對你來說很容易適應,如果你的實際規格細微差別!
完美;謝謝!有時間的初步試驗表明,它可能是一個觸動太慢,但我看到情況很少。 – 2010-07-03 21:50:00
@etotheipi,什麼是典型的,有意義的「基準'alist'」爲你的應用程序,你得到什麼時間(以及在什麼平臺上)以及哪些更好?有可能以多種方式進行調整和優化,但不是在真空中,所以這些都是必需的(理想情況下在一個新的問題中,以便允許寬敞的A的答案,而不是一個擠塞的評論線程;也理想地與一些典型的「基準」alist's,不僅僅是1)。 – 2010-07-03 21:54:44
不介意我說的 - 我沒有改變timeit的單位,我錯誤地認爲這個函數太慢了(doh!)。實際上,我的機器上大約需要56微秒的時間來通過比實際大小的輸入(最多8-10個項目)大15倍的輸入咀嚼,所以這正是我所需要的。再次感謝! – 2010-07-03 21:58:33
@KennyTM,no:Q是專門關於任意嵌套的列表,而這個人想要下降不超過一個級別 - 非常不同的問題,對於這個問題遞歸(或遞歸消除)將是非常不合適的簡單的迭代是好的,看我的A. – 2010-07-03 21:33:17