为了账号安全,请及时绑定邮箱和手机立即绑定

使用for循环在python中分配数组值

使用for循环在python中分配数组值

慕少森 2022-06-28 17:53:13
在 Python3 中动态创建二维数组时,在以下情况下不会更新值:no_col = 3no_row = 4arr = [[0 for x in range(no_col)] for y in range(no_row)] for i in arr[0]:    i = 1arr 值0 0 00 0 00 0 00 0 0但是在使用范围时,值会更新for i in range(no_col):    arr[0][i] = 1arr 值1 1 10 0 00 0 00 0 0为什么会这样?
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

这是因为你的每个

for i in arr[0]:
    i = 1

相当于

for idx in range(len(arr[0])):
    i = arr[0][idx]
    i = 1

您不能在 for each 循环中修改数组,因为每次迭代都会创建一个新变量,并且您正在修改新变量的值而不是数组

看看这个


查看完整回答
反对 回复 2022-06-28
?
米脂

TA贡献1836条经验 获得超3个赞

a = b在 Python 中的作用存在误解。


这并不意味着“修改a数据,使其与b数据相同”。


相反,它的意思是:“从现在开始,使用变量名a来引用由变量引用的相同数据b”。


请参阅此示例:


data = ['a', 'b', 'c']


x = data[0]  # x is now 'a', effectively the same as: x = 'a'


x = 'b'  # x is now 'b', but `data` was never changed


data[0] = 'm'  # data is now ['m', 'b', 'c'], x is not changed

data[1] = 'm'  # data is now ['m', 'm', 'c'], x is not changed

原始代码也会发生同样的情况:


for i in arr[0]:

    # i is now referencing an object in arr[0]

    i = 1

    # i is no longer referencing any object in arr, arr did not change


查看完整回答
反对 回复 2022-06-28
?
jeck猫

TA贡献1909条经验 获得超7个赞

在 python 中,变量不是指针。


循环内部发生的事情是


1)for each element  in the array 

2)copy value of the array element to iterator(Only the value of the array element is copied and not the reference to its memory)

3)perform the logic for each iteration.

如果您对迭代器对象进行任何更改,您只会修改变量值的副本,而不是原始变量(数组元素)。


查看完整回答
反对 回复 2022-06-28
  • 3 回答
  • 0 关注
  • 251 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号