我具有以下功能。
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'。
答案 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