`
shuiyutian
  • 浏览: 10641 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Python中zip()函数用法举例

阅读更多

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

>>> 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列表推导的方法,我们也能轻易完成这个任务

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

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

>>> 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

* 以指定概率获取元素

>>> 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之间平均取值的,显然我们的目的已经达到

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

原址:http://www.lfyzjck.com/python-zip/

分享到:
评论

相关推荐

    Python中zip()函数的简单用法举例

    主要给大家介绍了关于Python中zip()函数的简单用法,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    python中的 zip函数详解及用法举例

    python中zip()函数用法举例 定义:zip([iterable, …])  zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)...

    Python用zip函数同时遍历多个迭代器示例详解

    本文主要介绍的是Python如何使用zip函数同时遍历多个迭代器,文中的版本为Python3,zip函数是Python内置的函数。下面话不多说,来看详细的内容。 应用举例 &gt;&gt;&gt; list1 = ['a', 'b', 'c', 'd'] &gt;&gt;&gt; list2 = ['apple...

    Python的GUI编程模块EasyGUI.zip

    相反,所有的 GUI 交互都是通过简单的函数调用来调用的。EasyGUI 运行在 Python2 和3 上,除了 python 之外没有任何依赖。举例:&gt;&gt;&gt; import easygui &gt;&gt;&gt; easygui.ynbox('Shall I continue?', 'Title', ('...

    Python核心编程第二版

     6.17.2 元组类型操作符和内建函数、内建方法   6.18 元组的特殊特性   6.18.1 不可变性给元组带来了什么影响   6.18.2 元组也不是那么“不可变”   6.18.3 默认集合类型   6.18.4 单元素元组   ...

    Python核心编程第二版(ok)

     6.17.2 元组类型操作符和内建函数.c内建方法   6.18 元组的特殊特性   6.18.1 不可变性给元组带来了什么影响   6.18.2 元组也不是那么“不可变”   6.18.3 默认集合类型   6.18.4 单元素元组   ...

    Python-2023 Python面试题-优质-百余题

    Python_2023 Python面试题_优质_百余题 ...包括 python实现列表去重的方法、python内建数据类型有哪些、python中断言方法举例、说明zip()函数用法等,共一百余题 希望能对你的 Python 面试有一点帮助。

    python面试题(四).pdf

    python⾯试题(四) python⾯试题(四) 1、举例sort和sorted对列表排序,list=[0,-1,3,-10,5,9] 2、对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],使⽤lambda函数从⼩到⼤排序 3、使⽤lambda函数对list排序foo = ...

    标准函数stdlib.h应用举例_单片机C语言实例(纯C语言源代码).zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

    内部函数intrins.h应用举例_单片机C语言实例(纯C语言源代码).zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

    字符函数ctype.h应用举例_单片机C语言实例(纯C语言源代码).zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

    基于C语言实现字符函数ctype.h应用举例(含源代码+使用说明).zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

    基于C语言实现内部函数intrins.h应用举例(含源代码+使用说明).zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

    基于C语言实现标准函数stdlib.h应用举例(含源代码+使用说明).zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

Global site tag (gtag.js) - Google Analytics