gpt4 book ai didi

Python同时迭代多个序列的方法

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python同时迭代多个序列的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

问题 。

你想同时迭代多个序列,每次分别从一个序列中取一个元素.

解决方案 。

为了同时迭代多个序列,使用 zip() 函数。比如:

?
1
2
3
4
5
6
7
8
9
10
11
12
>>> xpts = [ 1 , 5 , 4 , 2 , 10 , 7 ]
>>> ypts = [ 101 , 78 , 37 , 15 , 62 , 99 ]
>>> for x, y in zip (xpts, ypts):
...   print (x,y)
...
1 101
5 78
4 37
2 15
10 62
7 99
>>>

zip(a, b) 会生成一个可返回元组 (x, y) 的迭代器,其中x来自a,y来自b。一旦其中某个序列到底结尾,迭代宣告结束。因此迭代长度跟参数中最短序列长度一致.

?
1
2
3
4
5
6
7
8
9
>>> a = [ 1 , 2 , 3 ]
>>> b = [ 'w' , 'x' , 'y' , 'z' ]
>>> for i in zip (a,b):
...   print (i)
...
( 1 , 'w' )
( 2 , 'x' )
( 3 , 'y' )
>>>

如果这个不是你想要的效果,那么还可以使用 itertools.zip_longest() 函数来代替。比如:

?
1
2
3
4
5
6
7
8
>>> from itertools import zip_longest
>>> for i in zip_longest(a,b):
...   print (i)
...
( 1 , 'w' )
( 2 , 'x' )
( 3 , 'y' )
( None , 'z' )
?
1
2
3
4
5
6
7
8
>>> for i in zip_longest(a, b, fillvalue = 0 ):
...   print (i)
...
( 1 , 'w' )
( 2 , 'x' )
( 3 , 'y' )
( 0 , 'z' )
>>>

讨论 。

当你想成对处理数据的时候 zip() 函数是很有用的。比如,假设你头列表和一个值列表,就像下面这样:

?
1
2
headers = [ 'name' , 'shares' , 'price' ]
values = [ 'ACME' , 100 , 490.1 ]

使用zip()可以让你将它们打包并生成一个字典:

?
1
s = dict ( zip (headers,values))

或者你也可以像下面这样产生输出:

?
1
2
for name, val in zip (headers, values):
   print (name, '=' , val)

虽然不常见,但是 zip() 可以接受多于两个的序列的参数。这时候所生成的结果元组中元素个数跟输入序列个数一样。比如,

?
1
2
3
4
5
6
7
8
9
10
>>> a = [ 1 , 2 , 3 ]
>>> b = [ 10 , 11 , 12 ]
>>> c = [ 'x' , 'y' , 'z' ]
>>> for i in zip (a, b, c):
...   print (i)
...
( 1 , 10 , 'x' )
( 2 , 11 , 'y' )
( 3 , 12 , 'z' )
>>>

最后强调一点就是,zip() 会创建一个迭代器来作为结果返回。如果你需要将结对的值存储在列表中,要使用 list() 函数。比如:

?
1
2
3
4
5
>>> zip (a, b)
< zip object at 0x1007001b8 >
>>> list ( zip (a, b))
[( 1 , 10 ), ( 2 , 11 ), ( 3 , 12 )]
>>>

以上就是Python同时迭代多个序列的方法的详细内容,更多关于Python同时迭代多个序列的资料请关注我其它相关文章! 。

原文链接:https://www.kancloud.cn/kancloud/python3-cookbook/47202 。

最后此篇关于Python同时迭代多个序列的方法的文章就讲到这里了,如果你想了解更多关于Python同时迭代多个序列的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com