Skip to main content
 首页 » 编程设计

python之如何将多个for循环组合成一个生成器python

2025年05月04日28lvdongjie

我在一个 Python 项目中到处使用这个 for 循环

for year in yearsindex: 
    for month in monthindex: 
        for hour in hourindex: 
            for node in nodeindex: 
                dosomething(year, month, hour, node) 

我想知道是否有一种方法可以将所有迭代器组合成一个迭代器以提高可读性

某种形式的东西

for (year, month, hour, node) in combinediterator: 
    dosomething(year, month, hour, node) 

请您参考如下方法:

这是 itertools.product :

import itertools 
for year, month, hour, node in itertools.product( 
        yearsindex, monthindex, hourindex, nodeindex): 
    dosomething(year, month, hour, node) 

您可以看到,将所有内容塞进单个逻辑行并不能真正提高可读性。有几种方法可以改进它。例如,如果您可以避免解包迭代器给您的元组,或者如果您可以将 itertools.product 的参数放在列表中并使用 *args 解包它们:

for arg_tuple in itertools.product(*indexes): 
    dosomething(*arg_tuple) 

如果循环体比一行 dosomething 长,您还可以获得减少缩进的好处。对于短循环体,这无关紧要。