定义:zip([iterable, ...])

zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压),看下面的例子就明白了:

1

2

3

4

5

6

7

8

9

>>> a = [1,2,3] >>> b = [4,5,6] >>> c = [4,5,6,7,8] >>> zipped = zip(a,b) [(1, 4), (2, 5), (3, 6)] >>> zip(a,c) [(1, 4), (2, 5), (3, 6)] >>> zip(*zipped) [(1, 2, 3), (4, 5, 6)]

对于这个并不是很常用函数,下面举几个例子说明它的用法:

* 二维矩阵变换(矩阵的行列互换)

比如我们有一个由列表描述的二维矩阵

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

通过python列表推导的方法,我们也能轻易完成这个任务

1

2

print [ [row[col] for row in a] for col in range(len(a[0]))] [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

另外一种让人困惑的方法就是利用zip函数:

1

2

3

4

5

>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> zip(*a) [(1, 4, 7), (2, 5, 8), (3, 6, 9)] >>> map(list,zip(*a)) [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

这种方法速度更快但也更难以理解,将list看成tuple解压,恰好得到我们“行列互换”的效果,再通过对每个元素应用list()函数,将tuple转换为list

* 以指定概率获取元素

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

>>> import random >>> def random_pick(seq,probabilities):

x = random.uniform(0, 1) cumulative_probability = 0.0 for item, item_probability in zip(seq, probabilities):

cumulative_probability += item_probability

if x < cumulative_probability: break return item

>>> for i in range(15):

random_pick("abc",[0.1,0.3,0.6])  'c' 'b' 'c' 'c' 'a' 'b' 'c' 'c' 'c' 'a' 'b' 'b' 'c' 'a' 'c'

这个函数有个限制,指定概率的列表必须和元素一一对应,而且和为1,否则这个函数可能不能像预想的那样工作。

稍微解释下,先利用random.uniform()函数生成一个0-1之间的随机数并复制给x,利用zip()函数将元素和他对应的概率打包成tuple,然后将每个元素的概率进行叠加,直到和大于x终止循环

这样,”a”被选中的概率就是x取值位于0-0.1的概率,同理”b”为0.1-0.4,”c”为0.4-1.0,假设x是在0-1之间平均取值的,显然我们的目的已经达到

python zip函数用于for循环_python zip 内置函数的使用相关推荐

  1. python函数大全和意思_python 之 内置函数大全

    一.罗列全部的内置函数 二.range.xrange(迭代器) 无论是range()还是xrange()都是Python里的内置函数.这个两个内置函数最常用在for循环中.例如: >>&g ...

  2. python函数打印乘法表_Python中内置函数来打印数学乘法表

    1.Python内置函数range的使用 range函数的作用可以理解取一个范围如下: >>>range(5) # :取一个在5的范围>range(0, 5) # 那么在这里取 ...

  3. python通过内置函数测试对象类型_Python的内置函数

    函数名 功能描述 示例 abs() 返回数字的绝对值 abs(-45) divmod() 把除数和余数运算结合起来,返回一个包含商和余数的元组 divmod(7,2) 返回:(3,1) raw_inp ...

  4. python函数速查手册_Python进阶-内置函数大全

    #1.abs() 绝对值或复数的模abs(-1) >>> 1 #2.all() 接受一个迭代器,如果迭代器的所有元素都为真,那么返回True,否则返回Falseall([1,2,3] ...

  5. python常用内置函数可以操作字符串_Python常用内置函数(二)

    字符串处理方法 1. str.capitalize: 将字符串首字母大写str.capitalize('abc')'Abc' 2. str.replace(old,new,[,count]): 替换字 ...

  6. python __call__一般用在哪些地方_Python __call__内置函数的作用和用法

    开学了进入了实验室,需要协助大师兄做事,主要是OpenStack中的代码解析,但是涉及很多python高级用法,一时间有点麻烦,在做项目的同时慢慢更新博客.这次先写一下__call__的用法,因为经常 ...

  7. python函数作用域与闭包_python基础-08-内置函数、作用域、闭包、递归

    python基础-内置函数.作用域.闭包.递归 1.常见的内置函数 常见的内置函数: 查看内置函数: print(dir(__builtins__)) 常见函数 type() 数据类型 print() ...

  8. python 倒叙 数组_Python函数合集:68个内置函数请收好!

    内置函数就是python给你提供的, 拿来直接用的函数,比如print.,input等.截止到python版本3.6.2 python一共提供了68个内置函数. #68个内置函数 # abs() di ...

  9. python模块的函数_python模块内置函数

    python提供了一个内联模块buildin,该模块定义了一些软件开发中经常用到的函数,利用这些函数可以实现数据类型的转换.数据的计算.序列的处理等. 模块的内置函数: 1.apply():可以调用可 ...

最新文章

  1. 怎样使用Debussy+ModelSim快速查看前仿真波形
  2. express 的 middleware 设计
  3. 将手机网站做成手机应用的JS框架
  4. 防风网-挡风抑尘墙:挡风抑尘墙
  5. 第11章 UART串口通信 练习题
  6. Python人工智能学习路线(长篇干货)
  7. is automatically signed, but provisioning profile has been manually specified. Set the provisioning
  8. 笔记本电脑如何设置html输出,笔记本电脑如何外接显示器 外接显示器详细步骤【详解】...
  9. 抢红包案例分析以及代码实现(二)
  10. 真过份,女友居然要我坐在马桶上小便
  11. PA 调试心得(一个电容引发的问题)
  12. java 摄像头 视频_javaCV-摄像头实时视频
  13. 2022-08-26 JQuery(二)
  14. java计算机毕业设计东理咨询交流论坛源码+数据库+系统+lw文档+部署
  15. ROS serial 读取IMU数据, 打包发布topic
  16. 金融业XIRR函数的算法思想与实现,java/plsql
  17. TCP/IP 基本C/S模型
  18. logstash filter 过滤器详解
  19. 零信任架构和访问控制模型ABAC
  20. bread是可数还是不可数_学了20年英语才明白:bread为什么是不可数名词?

热门文章

  1. Docker的工作原理
  2. autocad2016正交模式_Auto CAD2016开启正交快捷键是什么啊??
  3. 蓝桥杯c/c++真题 地宫寻宝
  4. “生活”才是生活的一部分
  5. 如何改善自己的情绪?
  6. Android 图形密码
  7. 《机器人动力学与控制》第九章——动力学 9.3 再看欧拉-拉格朗日运动方程
  8. 实用技巧|AD19快捷键大全
  9. BUUOJ-sqli_labs做题笔记
  10. html5 input email,html - HTML5 Email input pattern attribute - Stack Overflow