如何在for循环中更改变量?

时间:2020-03-29 16:17:14

标签: python for-loop

我具有以下功能。

def replace_zeros(nums1):
    for n in nums1:
        print 'nums1=', nums1, 'n=', n
        if n == 0:
            nums1[nums1.index(n)] = 2
    return nums1

print replace_zeros([1,2,3,0,0,0])

这给了我以下输出

>>> print replace_zeros([1,2,3,0,0,0])
nums1= [1, 2, 3, 0, 0, 0] n= 1
nums1= [1, 2, 3, 0, 0, 0] n= 2
nums1= [1, 2, 3, 0, 0, 0] n= 3
nums1= [1, 2, 3, 0, 0, 0] n= 0
nums1= [1, 2, 3, 2, 0, 0] n= 0
nums1= [1, 2, 3, 2, 2, 0] n= 0

我仅从nums1中获取“ n”,但是为什么即使更改了“ nums1”,“ n”值也没有改变? 您能否知道如何通过更改值来更改“ nums1”?

在python函数下面考虑此问题

def replace_zeros(nums1):
    for n in nums1:
        nums1.insert(1, 2)
        nums1 = nums1[:-1]
        print 'nums1=', nums1, 'n=', n
        if n == 0:
           nums1[nums1.index(n)] = 2
return nums1

print replace_zeros([1,2,3,0,0,0])

我在“ nums1 [nums1.index(n)] = 2”时出现索引错误,为什么即使我检查n == 0还是会出现索引错误?即即使nums1在循环内更改,我们从'for'循环中首次检索的'n'值也没有改变。我希望将“ n”与nums1一起更改。

我正在寻找重新加载nums1之类的东西,以便使'n'发生变化,并且'n == 0'条件应变为False,以免输入该'if'块,从而不会出现索引错误。

我知道当我们在nums1中执行'for n'时将定义'n'的内容,但是我希望通过在for循环中更改'nums1'来动态地更改'n'。

3 个答案:

答案 0 :(得分:1)

如果不需要打印语句,建议对替换功能进行列表理解:

def replace_zeros(arr):
    return [n if n != 0 else 2 for n in arr]

答案 1 :(得分:0)

因为您要用0替换2,但没有更改要替换零的n语句中的if的值

def replace_zeros(nums1):
    for n in nums1:
        if n == 0:
            nums1[nums1.index(n)] = 2
            n = 2
        print('nums1=', nums1, 'n=', n)
    return nums1

print(replace_zeros([1,2,3,0,0,0]))

输出:

nums1= [1, 2, 3, 0, 0, 0] n= 1                                                                                        
nums1= [1, 2, 3, 0, 0, 0] n= 2                                                                                        
nums1= [1, 2, 3, 0, 0, 0] n= 3                                                                                        
nums1= [1, 2, 3, 2, 0, 0] n= 2                                                                                        
nums1= [1, 2, 3, 2, 2, 0] n= 2                                                                                        
nums1= [1, 2, 3, 2, 2, 2] n= 2                                                                                        
[1, 2, 3, 2, 2, 2]  

答案 2 :(得分:0)

最好的方法是使用枚举:

def replace_zeros(nums1):
    for index,n in enumerate(nums1):
        if n == 0:
            nums1[index] = 2
        print('nums1=', nums1, 'n=', n)
    return nums1