鱼C论坛

 找回密码
 立即注册
查看: 2558|回复: 1

[技术交流] Python zip() 函数

[复制链接]
发表于 2020-3-16 14:59:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一个账号 于 2020-3-16 15:16 编辑

Python zip() 函数


语法
zip(*iterable) -> zip object

参数

参数描述
*iterable任意个迭代器


描述

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

我们可以使用 list() 转换来输出列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

返回值

返回一个 zip 对象。

例子
>>> zip()
<zip object at 0x0000029B69DA4040>
>>> zip([1, 2, 3], [4, 5, 6], [7, 8, 9])
<zip object at 0x000001A17357D140>
>>> list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> tuple(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))
((1, 4, 7), (2, 5, 8), (3, 6, 9))
>>> tuple(zip(zip([1, 2, 3], [4, 5, 6], [7, 8, 9])))
(((1, 4, 7),), ((2, 5, 8),), ((3, 6, 9),))
>>> tuple(zip([1, 2, 3]))
((1,), (2,), (3,))
>>> for i in tuple(zip(["Sunday", "Monday", "Tuesday"], [0, 1, 2])):
        print(i)

        
('Sunday', 0)
('Monday', 1)
('Tuesday', 2)
>>> for week, num in tuple(zip(["Sunday", "Monday", "Tuesday"], [0, 1, 2])):
        print(num, "->", week)

        
0 -> Sunday
1 -> Monday
2 -> Tuesday

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-16 15:07:42 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-3-16 17:28 编辑

一种可能的实现
class zip:
        def __init__(self,*iterables):
                self.__iterators=tuple((iter(i) for i in iterables))
        
        def __iter__(self):
                return self
        
        def __next__(self):
                return tuple((next(i) for i in self.__iterators))

        def __reduce__(self):
                return self.__class__,self.__iterators
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 22:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表