【Python PEP 笔记】201 - 同步迭代 / zip() 函数的使用方法

原文地址:https://peps.python.org/pep-0201/
PDF 地址:

什么是同步迭代

同步迭代就是用 for 一次循环多个序列。
类似于这样的东西:

arr1 = [1, 2, 3, 4]
arr2 = ['a', 'b', 'c', 'd']
for a, b in arr1, arr2:
	print(a, b)

使用 map 实现

for a, b in map(lambda x, y: (x, y), arr1, arr2):
    print(a, b)

原文为 Python 2,实现如下:

for a, b in map(None, arr1, arr2):
   print(a, b)

Python 3 map 函数的第一个参数不能为 None 了。

使用新函数 zip 实现

使用 map 不方便,最明显的一点就是每次都要自己写一个 lambda 才行。

为了更方便地实现同步迭代,PEP 201 提出了一个新函数 zip 来实现这个功能。

for a, b in zip(arr1, arr2):
    print(a, b)

zip 函数的其他用途

转置表格

例如

data = [
    ['id', 'name', 'income'],
    ['1', 'John', 200],
    ['2', 'Jane', 300],
    ['3', 'Joe', 100],
    ['4', 'Jill', 400],
    ['5', 'Jim', 230],
]

print(list(zip(*data)))

*data 相当于 zip(data[0], data[1], ..., data[n-1])
zip() 函数在 Python 2 中返回的是 list;在 Python 3 中返回的是迭代器,如果要输出展示,要先转换为 list

得到结果

[('id', '1', '2', '3', '4', '5'), ('name', 'John', 'Jane', 'Joe', 'Jill', 'Jim'), ('income', 200, 300, 100, 400, 230)]

很轻松就把行转成了列。

还可以利用 zip() 计算平均收入:

income_list = list(zip(*data[1:]))[2]
print('average income: ', sum(income_list) / len(income_list))

data[1:] 这里切片是为了去除表格第一行的标题。然后 [2] 是因为收入是表格的第三列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值