首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >优化循环中的条件语句/如何消除重复代码

优化循环中的条件语句/如何消除重复代码
EN

Stack Overflow用户
提问于 2017-02-28 09:33:39
回答 1查看 1.1K关注 0票数 2

我的Python代码有问题,但这是我在其他语言中已经遇到的问题,我想得到一个一般性的答案。

假设我有一个包含许多语句的循环。这些语句中的一条取决于一个不随迭代而改变的条件。我认为有两种方法可以实现这一点:

代码语言:javascript
运行
复制
for ... : 
    ... #many statements
    if conditionA :
        statementA
    elif conditionB : 
        statementB
    else 
        statementC

或:

代码语言:javascript
运行
复制
if conditionA :
    for ... : 
        ... #many statements
        statementA
elif conditionB : 
    for ... : 
        ... #many statements
        statementB
else :
    for ... :
        ... #many statements
        statementC

在第一个解决方案中,问题是我们在每次迭代中测试一些东西,这是不必要的。第二种解决方案的速度更快,因为它只测试一次条件,然后相应地启动循环,这正是我想要做的;但是现在有大量的代码重复(每次重写许多语句.)。

还有第三种方法,我没有想到这会像第二种方法那样有效,但没有代码重复?谢谢!

编辑:

我读到了一个类似的主题(Optimizing a Loop vs Code Duplication),C++编译器已经进行了优化(通过在编译期间将第一个版本转换为第二个版本)。那么像Python这样的解释语言呢?

EN

回答 1

Stack Overflow用户

发布于 2017-02-28 10:04:29

下面的代码所做的是将“依赖”于循环元素的条件和与循环元素“独立”的条件分开。

创建一个循环函数,以lambda代替作为语句。这里唯一的复制可能是λ部分,我猜

代码语言:javascript
运行
复制
def loop(arr,func):
     for a in arr
        // many statements

        func(a)
        //statement for that particular condition using lambda


if condition A: ## assume condition doesn't depend on loop elements
    loop(arr,lambda x:##any action)

elif condition B:
    loop(arr,lambda x:##any action)
.
.
.

else:
    for el in arr:
        //many statements

        if condition X: ## This condition depends on the loop element!..
            //statement X
        elif condition Y:
            //statement Y 
        .
        .
        .

我甚至希望将这种双重复制最小化,但这会变得相当复杂,因为您需要有条件的lambda之类的东西。

编辑

在我上面代码中的“否则”中这样做:

代码语言:javascript
运行
复制
else:
    def func2(a):
        if condition A:
            // some statement depending on the element. 'a' in this case
        elif condition B:
            // some statement depending on the element

    loop(arr,func2)

现在,即使是双重复制也减少了:-D

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42504986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档