Python:类似zip的函数,它的长度是计算最长奔跑路径长度的吗

Python中zip()函数用法实例教程
转载 & & 投稿:shichen2014
这篇文章主要介绍了Python中zip()函数用法实例教程,对Python初学者有一定的借鉴价值,需要的朋友可以参考下
本文实例讲述了Python中zip()函数的定义及用法,相信对于Python初学者有一定的借鉴价值。详情如下:
一、定义:
zip([iterable, ...])
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)。
二、用法示例:
读者看看下面的例子,对zip()函数的基本用法就可以明白了:
&&& 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)]
对于这个并不是很常用函数,下面举几个例子说明它的用法:
1.二维矩阵变换(矩阵的行列互换)
比如我们有一个由列表描述的二维矩阵
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
2.以指定概率获取元素
&&& 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])
这个函数有个限制,指定概率的列表必须和元素一一对应,而且和为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之间平均取值的,显然我们的目的已经达到。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具豆丁微信公众号
君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
python内置函数
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口【python】内置函数zip
时间: 22:28:08
&&&& 阅读:246
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&接收两个或多个序列,并返回一个元组列表,并且每个元组列表包含来自每个序列中的第一个元素
t = [11,23,45]
print(zip(s,t))
for pair in zip(s,t):
print(pair)
print(list(zip(s,t)))
D:\Python\Python35\python.exe D:/PycharmProjects/helloworld/src/zipTest.py&zip object at 0x9648&(‘a‘, 11)(‘b‘, 23)(‘c‘, 45)[(‘a‘, 11), (‘b‘, 23), (‘c‘, 45)]
Process finished with exit code 0
zip的序列长度不同,则取短的那个。
数量不相同:t长度大于s
t = [11,23,45,77,88]
print(zip(s,t))
for pair in zip(s,t):
print(pair)
print(list(zip(s,t)))
D:\Python\Python35\python.exe D:/PycharmProjects/helloworld/src/zipTest.py
&zip object at 0xB96C8&
(‘a‘, 11)
(‘b‘, 23)
(‘c‘, 45)
[(‘a‘, 11), (‘b‘, 23), (‘c‘, 45)]
Process finished with exit code 0
数量不相同,s长度大于t
s = "abcer"
t = [11,23,45]
print(zip(s,t))
for pair in zip(s,t):
print(pair)
print(list(zip(s,t)))
D:\Python\Python35\python.exe D:/PycharmProjects/helloworld/src/zipTest.py
&zip object at 0xE2C9648&
(‘a‘, 11)
(‘b‘, 23)
(‘c‘, 45)
[(‘a‘, 11), (‘b‘, 23), (‘c‘, 45)]
Process finished with exit code 0
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文地址:http://www.cnblogs.com/AlexBai326/p/6691184.html
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!Python中的map函数、zip函数、filter函数和reduce函数
实际上提供了一个内置的工具,map函数。这个函数的主要功能是对一个序列对象中的每一个元素应用被传入的函数,并且返回一个包含了所有函数调用结果的一个列表。
>>>counters = [1,2,3]
>>def inc(x) :return x+10
>>>list(map(inc, counters))
[11,12,13]
>>> map(lambda x : x * 2,[1,2,3,4,[5,6,7]])
[2, 4, 6, 8, [5, 6, 7, 5, 6, 7]]
如果给出了额外的可迭代参数,则对每个可迭代参数中的元素并行的应用函数。
>>> def abc(a, b, c):
return a*10000 + b*100 + c
>>> list1 = [11,22,33]
>>> list2 = [44,55,66]
>>> list3 = [77,88,99]
>>> map(abc,list1,list2,list3)
map只做了列上面的运算,而列表推导做了笛卡尔乘积。
函式说明:zip(seq1[,seq2 [...]])->[(seq1(0),seq2(0)...,(...)]。
同时循环两个一样长的函数,返回一个包含每个参数元组对应元素的元组。若不一致,采取截取方式,使得返回的结果元组的长度为各参数元组长度最小值。
>>>for x,y in zip([1,2,3],[4,5,6])
>>>print x,y
>>>for x,y in zip([1,2,3],[4,5])
>>>print x,y
filter函数
filter(bool_func,seq):此函数的功能相当于过滤器。
调用一个布尔函数bool_func来迭代遍历每个seq中的元素,返回一个使bool_seq返回值为true的元素的序列。
>>> filter(lambda x : x%2 == 0,[1,2,3,4,5])
reduce函数
reduce(func,seq[,init]):func为二元函数,将func作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值:如果初始值init给定,第一个比较会是init和第一个序列元素而不是序列的头两个元素。
>>> reduce(lambda x,y : x + y,[1,2,3,4])
>>> reduce(lambda x,y : x + y,[1,2,3,4],5)2010 年 12 月 4 日
定义: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之间平均取值的,显然我们的目的已经达到http://www.lfyzjck.com//401.html
阅读(...) 评论()

我要回帖

更多关于 计算最长奔跑路径长度 的文章

 

随机推荐