分享

Python for循环同时遍历两个列表

 只怕想不到 2024-05-25 发布于湖北

“ 
“ 本号不会发布:整篇AI生成、完全复制转载无实际意义的内容,请放心食用。
公众号格式受限和不允许文章外链,更好的阅读格式和资源引用请点击阅读原文查看。

Python for循环同时遍历两个列表我们可以使用Python zip函数来实现,

zip() 函数简介

zip() 函数是 Python 内置函数之一,zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成zip对象。

在Python2中,zip() 函数返回的是列表,在Python3中,则是返回上述所说的zip对象,这样可以减少内存。如果需要列表,我们可以使用list()转换为列表。不过它们包含的元素都是一样的(都是元组)。

语法

  1. zip([iterable, …])

参数说明:

  • iterable — 一个或多个迭代器;

for循环同时遍历两个列表示例代码

  1. # -*- coding: utf-8 -*-

  2. odd_number_list = [1, 3, 5, 7, 9]

  3. even_number_list = [2, 4, 6, 8, 10]

  4. for number in zip(odd_number_list, even_number_list):

  5. print(number)

  6. print('---' * 10)

  7. for odd_number, even_number in zip(odd_number_list, even_number_list):

  8. print(odd_number, even_number)

输出结果

  1. (1, 2)

  2. (3, 4)

  3. (5, 6)

  4. (7, 8)

  5. (9, 10)

  6. ------------------------------

  7. 1 2

  8. 3 4

  9. 5 6

  10. 7 8

  11. 9 10

注意事项

迭代器的元素个数不一致会怎样?

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

在网上还看到其他的回答内容说在Python2中,如果你需要遍历大数据量的迭代器时,使用zip函数可能会占用大量的内存,这个时候建议使用itertools模块中的izip函数,

itertools.izip(*iterables)用于将多个可迭代对象对应位置的元素作为一个元组,将所有元组『组成』一个迭代器,并返回,不过这个函数在python3.x中已不存,Python3中我们直接使用zip即可。

如果两个列表(迭代器)的长度不一,在Python2中可以使用itertools模块的izip_longest函数(该函数在python3.x中已不存在),izip_longest跟 izip 类似,但izip_longest在迭代过程会持续到所有可迭代对象的元素都被迭代完。

izip_longest 示例代码

  1. from itertools import izip_longest

  2. for item in izip_longest([1, 2, 3], ['a', 'b', 'c', 'd', 'e'],fillvalue='-'):

  3. print(item)

输出结果

  1. (1, 'a')

  2. (2, 'b')

  3. (3, 'c')

  4. ('-','d')

  5. ('-','e')

既然izip_longest函数在Python3中已不存在,那么在Python3中想要遍历完最长的对象应该怎样呢?在Python中可以使用itertools中的zip_longest函数:

zip_longest 示例代码

  1. from itertools import zip_longest

  2. for item in zip_longest([1, 2, 3], ['a', 'b', 'c', 'd', 'e']):

  3. print(item)

输出结果

  1. (1, 'a')

  2. (2, 'b')

  3. (3, 'c')

  4. (None, 'd')

  5. (None, 'e')

缺失值我们可以使用fillvalue参数去设置:

  1. from itertools import zip_longest

  2. for item in zip_longest([1, 2, 3], ['a', 'b', 'c', 'd', 'e'], fillvalue='-'):

  3. print(item)

输出结果

  1. (1, 'a')

  2. (2, 'b')

  3. (3, 'c')

  4. ('-', 'd')

  5. ('-', 'e')

其他方式实现

除了zip函数,还可以使用先用len函数的方式得到一个列表的长度,然后循环这个长度数字,根据这个数字作为列表的索引去对两个列表取值,不过这种方法显然不如zip简单快捷…

Python列表相关文章

Python enumerate() 函数,Python将列表转换为索引:元素的字典

python sort()函数详解 – python列表排序函数

Python for 循环列表每次取值指定个数元素

Python从列表中随机获取元素方法

Python获取两个列表的交集

相关资料

2. Built-in Functions—Python 2.7.18 documentation – zip([iterable, …])
https://docs./2/library/functions.html#zip
itertools — Functions creating iterators for efficient looping — Python 3.12.2 documentation – itertools.zip_longest(*iterables, fillvalue=None)
https://docs./3/library/itertools.html#itertools.zip_longest

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多