背景
使用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