在写脚本过程中总能遇到这样的需求:如一个二维列表list1 = [[1, 2, 3], [11, 22, 33]],如何能有效快捷地得到新的二维列表list2 = [[1, 11], [2, 22], [3, 33]]呢?也就是将子列表中相同位置的元素重组,得到新的列表。有以下三种方案,其中第三种很推荐:
1. 正常思路就是双重循环,如下:
list1, list2 = [[1, 2, 3], [11, 22, 33]], []
for idx in range(len(list1[0])):
list2.append([item[idx] for item in list1])
print(list2) # [[1, 11], [2, 22], [3, 33]]
2. 使用itemgetter配合一层for循环,如下:
from operator import itemgetter
list1 = [[1, 2, 3], [11, 22, 33]]
list2 = [list(map(itemgetter(idx), list1)) for idx in range(len(list1[0]))]
print(list2) # [[1, 11], [2, 22], [3, 33]]
3. 但由于循环很麻烦,有一种更简单的方法:zip与解包的结合。(我一般使用这种方案) 如果有小伙伴不知道什么是解包,可参考我的这条博客: