【问题标题】:How do I make the same iteration for several different lists at the same time in Python如何在 Python 中同时对多个不同的列表进行相同的迭代
【发布时间】:2015-03-24 00:31:50
【问题描述】:

如果我有多个不同长度的列表,是否有一种简单的方法可以对所有列表进行相同的迭代。

很想写这样的东西:

for item in list1:
    function(item)
for item in list2:
    function(item)
.
.
.
for item in listn:
   function(item)

我只是写了这样的东西:

for item in list1,list2,...,listn:
    function(item)

我知道你可以通过组合列表来做到这一点,因为我想要比每次调用函数时都组合它们更有效的方法

【问题讨论】:

  • 可以只做for item in list1+list2+list3:,但这通常比glglglthefourtheye下面展示的技术效率低,因为它必须创建一个新列表来迭代。此外,glglglthefourtheye 显示的代码适用于其他类型的可迭代对象,而不仅仅是列表和元组等容器。

标签: python list python-2.7 iterator


【解决方案1】:

itertools module 涵盖了与迭代有关的任务。

你有一个chain() function 可以做

import itertools
for item in itertools.chain(list1, list2, list3):
    function(item)

顺便说一句,整个标准库文档都值得一读,有很多有趣的东西可以防止你重新发明轮子。

【讨论】:

    【解决方案2】:

    您可以创建一个generator expression,它会像这样从各个列表中一个一个地给出项目

    for item in (elem for c_list in (list1, list2, list3) for elem in c_list)):
        function(item)
    

    例如,

    >>> def function(item):
    ...     print item
    ... 
    >>> list1, list2, list3 = [1, 2], [3, 4], [5, 6]
    >>> for item in (elem for c_list in (list1, list2, list3) for elem in c_list):
    ...     function(item)
    ... 
    1
    2
    3
    4
    5
    6
    

    注意:我们创建的生成器表达式并没有连接所有列表,它只是迭代列表的元组,然后迭代各个列表以逐个获取元素。

    【讨论】:

    • 虽然不如 glglgl 的代码简洁,但它确实具有不需要import 的优点。 OTOH,导入 itertool 不会破坏银行。 :)
    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2016-12-05
    • 1970-01-01
    相关资源
    最近更新 更多