背景
使用Python內建的zip函數可以對長度相同的list進行組合
>>> zip([1,2,3],[4,5,6])
[(1, 4), (2, 5), (3, 6)]
注意Python 3會返回zip object需要list()顯式轉換。
疑問
如何將[(1, 4), (2, 5), (3, 6)]恢復為[[1,2,3],[4,5,6]]
實現
顯然Python並沒有提供unzip()方法,可通過繼續調用zip()實現解壓
>>> zip((1, 4), (2, 5), (3, 6))
[(1, 2, 3), (4, 5, 6)]
看似很奇怪,本質上還是zip()操作,返回列表的子列表長度取決於zip()傳入參數的個數
因此再次操作即可實現unzip
進階
使用函數入參的*args將列表轉化為獨立的參數輸入zip()使得調用更加簡潔
>>> r=zip([1,2,3],[4,5,6])
>>> r
[(1, 4), (2, 5), (3, 6)]
>>> zip(*r)
[(1, 2, 3), (4, 5, 6)]
參考
python - How to unzip a list of tuples into individual lists? - Stack Overflow
