Python 函数整理

zip 函数

1. 以多个可迭代对象作为参数,把对象中的元素打包成一个个元组

[1, 2], [3, 4] --> [1, 3], [2, 4]

2. 如果 可迭代对象长度不一致,以短为准

[1, 2], [3, 4, 5] --> [1, 3], [2, 4]

3. 利用 * 号操作符时,输入为 单个可迭代对象,作用是把 可迭代对象中各个元素进行解压,然后再打包

*['abc', [1, 2, 3]] --> ('a', 1), ('b', 2), ('c', 3)

注意 此时 可迭代对象中的 元素也必须 可迭代

4. 返回一个对象,可用 list() 转换为列表,这样可节省内存    【Python2 直接返回 list】

x = zip([1, 2], [3, 4])
print(x, type(x))   # <zip object at 0x0000000003129508> <class 'zip'>
list(x)             # 转换为列表

示例代码

##### 不带 *,参数为 多个可迭代对象
### 长度一致
for j in zip([1, 2], [3, 4]):
    print(j)
# (1, 3)
# (2, 4)

### 长度不一致,以短为准
for j in zip([1, 2], [3, 4, 5]):
    print(j)
# (1, 3)
# (2, 4)

### 也可以是多个 list
for j in zip([1, 2], [3, 4, 5], [7, 8]):
    print(j)
# (1, 3, 7)
# (2, 4, 8)

##### 带 *,参数为 单个可迭代对象
for i in zip(['flss', 'flsdfs', 'flpposfs']):   # 不带 *,便于对比
    print(i)
# ('flss',)
# ('flsdfs',)
# ('flpposfs',)

for i in zip(*['flss', 'flsdfs', 'flpposfs']):  # 带 *,list
    print(i)
# ('f', 'f', 'f')       本来是个 list,把每个元素拆开,对应位置合并,拆开操作理解为解压
# ('l', 'l', 'l')
# ('s', 's', 'p')
# ('s', 'd', 'p')

for i in zip(*('flss', 'flsdfs', 'flpposfs')):  # 带 *,tuple
    print(i)
# ('f', 'f', 'f')
# ('l', 'l', 'l')
# ('s', 's', 'p')
# ('s', 'd', 'p')

### 可迭代对象的元素必须可迭代
for i in zip(*('abc', [1, 2, 3])):  # 可迭代对象中的元素必须可迭代
    print(i)
# ('a', 1)
# ('b', 2)
# ('c', 3)

for i in zip(*[1, 2, 3]):       # TypeError: zip argument #1 must support iteration 不可迭代报错
    print(i)

参考资料:

https://www.runoob.com/python3/python3-func-zip.html  Python3 zip() 函数

原文地址:https://www.cnblogs.com/yanshw/p/15074906.html