* 作者:煮酒品茶 tea
* 博客:http://www.zwhset.com http://cwtea.blog.51cto.com
* 目前在京峰教育担任python讲师
# 0、zip函数
> zip函数接收若干个序列,将它们下标相同的值组成一对元组
# 1、函数原型
~~~
zip(...)
zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)] # 返回一个list
~~~
# 2、zip方法分析
~~~
def zip(*iterables):
# zip('ABCD', 'xy') --> Ax By
sentinel = object() #初始化一个对象
iterators = [iter(it) for it in iterables] #遍历对象并存为生成器对象被使之可被迭代,这里非常关键
while iterators:
result = []
for it in iterators #核心处理代码(x,y):这里的x,y是不同元素的不同迭代
elem = next(it, sentinel) #获取生成器的第一个元素,随后使用第二个进行组合。result.append(elem)
if elem is sentinel: #这里有个判断,如果说元素不平衡则会直接取消
return
result.append(elem) #元素组合
yield tuple(result) #生成器返回
~~~
这段代码利用了生成器的概念,生成器一次返回一个,然后用不同的生成器去获取第一个,也就是x生成器的元素与y生成器的元素,最后进行元素组合。
# 3、样例
~~~
>>> zip('ab','bc')
[('a', 'b'), ('b', 'c')]
>>> seq1 = ['Michael','Lucy','Linda','Jason']
>>> seq2 = [70,90,85,60]
>>> reslut = zip(seq1,seq2)
>>> print reslut # 两个列表一一对应生成一个元组对,放在一个列表中
[('Michael', 70), ('Lucy', 90), ('Linda', 85), ('Jason', 60)]
>>> dict(reslut) # 使用dict转成一个字典
{'Linda': 85, 'Michael': 70, 'Lucy': 90, 'Jason': 60}
~~~
应用场景:
把序列组合成元组对,可以通过dict函数很方便的转成一个dict, 如果两个序列长度不相等会忽略掉元素
- python核心
- python27编译安装
- 原处修改以及拷贝
- loop
- 内置的变量
- 内置类型
- python内置方法
- 内置方法列表
- 求绝对值-abs
- 求商取余-divmod
- 交换输入-input
- [未完]文件打开函数-open
- staticmethod
- 判断迭代对象真假all
- 判断迭代对象真假any
- 枚举对象enumerate
- 整数转换类型int
- ascii码转换ord-chr-unichr
- 类型转换str
- python执行字符串表达式eval
- 类型判断isinstance
- 数学计算pow
- 数学计算和sum
- 不可变集合frozenset
- zip
- 比较cmp
- basestring类型判断
- 反转序列迭代器resversed
- python模块
- glob
- sys.argvgetopt-argparse
- os
- sys
- requests
- random
- time
- date
- zlib-gzip-bz2-zipfile-tarfile
- ftp
- paramiko
- pexpect
- 数据库模块
- redis
- mysql
- mongodb
- __builtin__
- 学生PYTHON分享
- 学生运维分享