一篇文章掌握 Python 内置 zip 的全部内容( 二 )

3、zip() 的问题与解决zip() 最明显的问题是它会舍弃掉未耗尽的迭代器:

一篇文章掌握 Python 内置 zip 的全部内容

文章插图
 
这是一种木桶效应,最终的结果由最短的木板来决定 。
有一种解决思路是取长板,同时补足短板(用 None 值填充),这就是 itertools 中的 zip_longest 方法:
一篇文章掌握 Python 内置 zip 的全部内容

文章插图
 
它填充了冗余数据,同时最大限度地保证了原始数据的完整性 。
但是,如果我们不希望有冗余数据,只希望得到按最长方式对齐的数据呢?
Python 官方最近采纳了 PEP-618,它就是为了应对这个问题 。当出现迭代器长度不一致时,它既不向短板妥协,也不向长板妥协,而是抛出 ValueError 。它认为入参值错误,也就是严格要求入参的数据完整性 。
该 PEP 会被合入到一年后的 Python 3.10 版本,关于更多的内容细节,可查阅这篇PEP-618 译文。(https://mp.weixin.qq.com/s/W6XkRjDHvVSqtZKRceqwdw)

【一篇文章掌握 Python 内置 zip 的全部内容】


推荐阅读