对于一个二维列表或者元组 l ,*l 表示结构之
l = [[1,2,3],[4,5,6]]
print(*l)
# 输出[1, 2, 3] [4, 5, 6]
zip函数内的参数一定得是可以迭代的
l = [1,3,5]
print(zip(*l))
# 报错:'int' object is not iterable,int对象不是可迭代的
zip()函数表示将这些解构出来的元素通过n(n为解构后每个元素的长度)个为一组的组合的方式以元组的形式组合起来,输出一个zip对象
print(zip(*a))
# 输出<zip object at 0x000001D5F7553E40>
print(type(zip(*a)))
# 输出<class 'zip'>
一般以列表的形式展示出来
print(list(zip(*l)))
# 输出[(1, 4), (2, 5), (3, 6)]
# l = l = [[1,2],[3,4],[5,6]]
# 输出[(1, 3, 5), (2, 4, 6)]
这相当于是原二维列表顺时针旋转后的镜像
如果想让新列表中的元素以列表形式存在,可以通过以下方法
print(list(map(list,zip(*l))))
# 输出[[1, 4], [2, 5], [3, 6]]
拓展:
map函数也有类似于解构的作用,但不同于 *l 的是,map函数输出了一个map对象,需要再次解构一次才能用于zip()函数(map对象是一个整体,只包含一个可以迭代的对象,*l解构后包含多个可迭代的对象)
l = [[1,2,3],[4,5,6]]
print(map(list,l))
# 输出<map object at 0x0000020FB228D3F0>
print(list(map(list,l)))
# 输出[[1, 2, 3], [4, 5, 6]]
print(list(zip(map(list,l))))
# 输出[([1, 2, 3],), ([4, 5, 6],)]
# map对象是一个整体,只包含一个可以迭代的对象
# *l解构后包含多个可迭代的对象
print(list(zip(*map(list, l))))
# 输出[(1, 4), (2, 5), (3, 6)]