python for-loop只执行一次?

时间:2017-01-30 10:15:13

标签: python function loops if-statement for-loop

import numpy as np
def Vin(t):
    inputs = []
    for i in range (1000):
        if (-1)**(np.floor( 2 * t[i] )) == 1:
            Vin = (1)
            inputs.append(Vin)
        else:
            Vin = (-1)
            inputs.append(Vin)

        return inputs

当我在一系列t值上使用此函数时,我只得到一个结果,

即。

input1=Vin(tpoints)
print (input1)

只给[1],而我希望函数为每个t值执行此操作。

3 个答案:

答案 0 :(得分:3)

正如其他人所说,return声明中存在缩进错误。我无法以更加pythonic的方式重写你的代码,避免所有繁琐的循环和由此产生的错误:

return [1 if (-1)**(np.floor( 2 * t[i] )) == 1 else -1 for i in range (1000)]

列表comprenhension + ternary构造语句在1行中创建你的-1,1数组,比你用循环写的快得多。

答案 1 :(得分:0)

你正在for循环中返回,所以你会在循环的第一次迭代时从函数返回。

您可以重写以下功能

<强>代码

def Vin(t):
    inputs = []
    for i in range (1000):
        if (-1)**(np.floor( 2 * t[i] )) == 1:
            inputs.append(1)
        else:
            inputs.append(-1)
    return inputs

检查此处函数中返回输入的缩进。

BTW,您的功能可以简化为更加pythonic和高效的代码

def Vin(t):
 reduce map(lambda x:int((-1)**(np.floor( t[i] < 1))), range (1000))

答案 2 :(得分:0)

尝试:

 for i in range (1000):
        if (-1)**(np.floor( 2 * t[i] )) == 1:
            Vin = (1)
            inputs.append(Vin)
        else:
            Vin = (-1)
            inputs.append(Vin)

 return inputs

返回的当前缩进,在第一次迭代后退出for循环