Python: zip用法详解(可以用作数据的多标签制作)

关于zip的一些理解

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。我们可以使用 list() 转换来输出列表。

# 首先创建一些变量,用来做测试
a = [1, 2, 3]
b = [4, 5, 6]
c = ['f', 'e', 'l', 'a', 'i', 'm']
d = [11, 11, 11, 11]
# 使用zip,对同纬度同类型数据进行测试
zipped1 = zip(a, b)
# 可以看到python3返回的是zip对象,python2返回的是一个列表
print(zipped1) 
# 我们可以使用 list() 转换来输出列表
print(list(zipped1))
<zip object at 0x7fb9878f3708>
[(1, 4), (2, 5), (3, 6)]
# 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同
zipped2 = zip(d, a)
print(list(zipped2))
# 我们也可以同时zip多个迭代器
zipped3 = zip(a, b, c, d)
print(list(zipped3))

[(11, 1), (11, 2), (11, 3)]
[(1, 4, 'f', 11), (2, 5, 'e', 11), (3, 6, 'l', 11)]
zipped4 = zip(c, a)
print(list(zipped4))
# 利用 * 号操作符,可以将元组解压为列表
unzip1, unzip2 = zip(* zip(c, a))
print(unzip1)
print(unzip2)
[('f', 1), ('e', 2), ('l', 3)]
('f', 'e', 'l')
(1, 2, 3)
zipped5 = zip(d, a)
print(list(zipped5))
unzip1, unzip2 = zip(* zip(d, a))
print(unzip1)
print(unzip2)
[(11, 1), (11, 2), (11, 3)]
(11, 11, 11)
(1, 2, 3)
import itertools
#使用itertools,可以使得返回列表长度与最长的对象相同
zipped6 = itertools.zip_longest(c, a)
# print(list(zipped6))
unzip1, unzip2 = zip(* itertools.zip_longest(c, a))
print(unzip1)
print(unzip2)
#这里对zip对应直接进行zip(*)操作
x, y = zip(*zipped6)
print(x)
print(y)
('f', 'e', 'l', 'a', 'i', 'm')
(1, 2, 3, None, None, None)
('f', 'e', 'l', 'a', 'i', 'm')
(1, 2, 3, None, None, None)
#在进行最后一个测试
zipped7 = zip(a, b, c, d)
print(zipped7)
a_, b_, c_, d_ = zip(*zipped7)
print("a_: ", a_)
print("b_: ", b_)
print("c_: ", c_)
print("d_: ", d_)
<zip object at 0x7fb9878caf08>
a_:  (1, 2, 3)
b_:  (4, 5, 6)
c_:  ('f', 'e', 'l')
d_:  (11, 11, 11)

end!

发布了349 篇原创文章 · 获赞 237 · 访问量 65万+

猜你喜欢

转载自blog.csdn.net/Felaim/article/details/104857523