如何在python中不使用两个for循环的情况下,通过一个函数迭代一个结构两次,但每次使用不同的参数?

2024-09-26 22:09:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是一个庞大的系统,所以我无法对功能进行任何更改

我的目标是使用某个参数(产生/返回结果)运行x函数,然后使用不同的参数(产生/返回第二个结果)运行x函数。最好比我现在拥有的解决方案要短一些

我尝试使用zip(),但获取元组时没有属性错误。我知道C在迭代时有一个concat函数

def function():

    # returns "1 2 3"
    for x in pdm.function(param1): 
        yield {
            x.info1
            # more info 2 -7 
            x.info8
            }

    # returns "a" 
    for x in pdm.function(param2): 
        yield {
            x.info1
            # more info 2 -7 
            x.info8
            }

这将返回我需要的“123A”,但很长,我想学习如何更好地迭代它

我不能执行for x, y in pdm.function(param1):,因为它们需要有不同的参数

我知道我也可以遵循干,使内部功能。这将使我的行数减少一半,但也会在现有的庞大代码库中添加另一个函数:

def printwords(x):
        yield {
            x.info1
            # more info 2 -7 
            x.info8
            }

理想情况下,如果存在这样的连接,这将是我要寻找的答案:

for x in pdm.function(param1) and x in pdm.function(param2): 
    yield {
        x.info1
        # more info 2 -7 
        x.info8
        }

谢谢大家!


Tags: 函数in功能infofor参数defmore
2条回答

我想你在找itertools.chain

from itertools import chain

for x in chain(pdm.function(param1), pdm.function(param2)):
    yield x

但我想评论一下你使用“慢”作为有意义的比较

除非您也在对代码进行基准测试,或者已经使用大O或大Θ分析计算出代码的复杂性,否则您真的不能说序列中的两个for循环是“慢”的,或者说外部循环只运行两次的嵌套for循环比具有序列for循环的初始代码“慢”。没有复杂性分析和基准测试,您只是从语言语法推断性能特征。如果你这样做,你会经常感到惊讶。一旦源代码转换成字节码并在python虚拟机上运行,谁知道会进行哪些优化呢

更简洁或紧凑的代码并不总是产生更高效的代码

那么:

params = [param1, param2]
for p in params:
    for x in pdm.function(p):......

相关问题 更多 >

    热门问题