关于列表赋值出错
牛逼了,原来这样不可改参数啊!!
t = [,,]
for out int:
for el in out:
el = 0
print(el)
for each in t:
print(each)
0
0
0
0
0
0
0
0
0
这样才可以
t = [,,]
##for out int:
## for el in out:
## el = 0
## print(el)
##for each in t:
## print(each)
for i inrange(3):
for j in range(3):
t = 0
for each in t:
print(each)
==========
0
0
0
0
0
0
0
0
0
【问题】 为什么是后者才可以? 我也遇到过这个问题
我感觉是因为第一个 el 只是作为一个变量,原列表的数值赋值给了变量,所以你每次修改的都是 变量 el 的值,而非列表的值
第二种是指定了列表的第几个子列表的第几个元素,将值赋值给指定的元素 你修改变量e1的值跟列表t没啥关系
但是你修改t中元素的值就跟t有关系了 for ..in..只起访问作用
是不能修改列表的 昨非 发表于 2021-2-20 18:31
for ..in..只起访问作用
是不能修改列表的
不对,for i in range(10): a = i 是可以的 因为类似于 for each in t: 这样的语句,each都只是一个单纯的变量,和列表无关
只有后者才可以真正的改变列表 qiuyouzhi 发表于 2021-2-20 18:53
不对,for i in range(10): a = i 是可以的
这位大哥的意思应该是 你用你这样的方法,也是无法改变range(10)中的元素的值的{:10_277:} 昨非 发表于 2021-2-20 18:31
for ..in..只起访问作用
是不能修改列表的
受教了,大哥{:10_243:} qiuyouzhi 发表于 2021-2-20 18:54
因为类似于 for each in t: 这样的语句,each都只是一个单纯的变量,和列表无关
只有后者才可以真正的改变 ...
谢谢大哥{:10_254:} 昨非 发表于 2021-2-20 18:31
for ..in..只起访问作用
是不能修改列表的
话太绝对了吧{:10_277:}
这个 for ...in...就能修改 list 的值
for i in range(len(list1)):
list1 = 0
for each in list1 才是访问{:10_285:} Daniel_Zhang 发表于 2021-2-20 19:07
话太绝对了吧
这个 for ...in...就能修改 list 的值
我说的就是上面的情况,你这用索引本质和楼主第二种情况是一样的啊,{:10_250:} qiuyouzhi 发表于 2021-2-20 18:53
不对,for i in range(10): a = i 是可以的
是指初始化吗? qiuyouzhi 发表于 2021-2-20 18:53
不对,for i in range(10): a = i 是可以的
……我觉得你说的这个和问题没什么关系…… Python初学者8号 发表于 2021-2-20 19:01
这位大哥的意思应该是 你用你这样的方法,也是无法改变range(10)中的元素的值的
去..我的中括号被转义了
i的左右两边是有中括号的 昨非 发表于 2021-2-20 19:32
是指初始化吗?
中括号被转义了..i的左右两边是有中括号的.. 本帖最后由 考不好不改名 于 2021-2-20 21:33 编辑
声明:下文中不一定表述准确和严谨,可能有很大纰漏、错误,请大家指正(事实可能不是如我所说,但应该可以这样·理·解·,我就是这么理解的)。
这个问题得从指针讲起(当然Python里没有指针,但是Python是用C语言写的啊)。
变量本质上是指向常量的指针,如:a = 1其实就是让变量a指向常量1,当访问变量a时,会顺着指针访问常量1。
列表就是一堆指针,如:ls = 可以理解为:ls -> 1; ls -> 2; ls->3
for语句会让变量遍历列表的每一个元素,即让指针分别指向每一个元素,如:ls =
for each in ls:
each = 0第一次循环开始前,各变量及其指向是这样的:
ls -> 1; ls -> 2; ls->3;
each -> 1(这里之所以不是 each -> ls 是由于赋值语句的结合性(Python不讨论,但C语言讨论),右边先被计算出来,返回常量1)
执行第一次 each = 0 后,各变量及其指向是这样的:
ls -> 1; ls -> 2; ls->3;
each -> 0(可见,赋值语句仅仅改变了本次循环中each的值,列表不变)
那么,另外一个例子:ls =
for i in range(len(ls)):
ls = 0第一次循环开始前,各变量及其指向是这样的:
ls -> 1; ls -> 2; ls->3;
i -> 0
那么第一次赋值语句即为 ls = 0,列表的值被改变。
推而广之,列表各元素的值都变成了0。 qiuyouzhi 发表于 2021-2-20 19:55
中括号被转义了..i的左右两边是有中括号的..
{:10_243:}怎么越来越 不懂你说的啥意思。。。
我现在只能理解为,for iinlist只能其遍历的作用,这里面的i 和实际的lis>>> t = list(range(6))
>>> t
>>> for i in t:
print(id(i))
140718108612224
140718108612256
140718108612288
140718108612320
140718108612352
140718108612384
>>> for i in range(6):
print(id(t))
140718108612224
140718108612256
140718108612288
140718108612320
140718108612352
140718108612384
>>> for i in t:
i = i**2
print('i= %s,id(%s) '%(i,id(i)))
i= 0,id(140718108612224)
i= 1,id(140718108612256)
i= 4,id(140718108612352)
i= 9,id(140718108612512)
i= 16,id(140718108612736)
i= 25,id(140718108613024)
>>> t
t(index)不是一个东西 我懂了,确实和@昨非和@qiuyouzhi讲的一样,这里面for i in list只是进行遍历,应该理解这种循环是一种函数,这里面i只是临时的赋值而已>>> t = list(range(6))
>>> t
>>> for i in t:
print(id(i))
140718108612224
140718108612256
140718108612288
140718108612320
140718108612352
140718108612384
>>> for i in range(6):
print(id(t))
140718108612224
140718108612256
140718108612288
140718108612320
140718108612352
140718108612384
>>> for i in t:
i = i**2
print('i= %s,id(%s) '%(i,id(i)))
i= 0,id(140718108612224)
i= 1,id(140718108612256)
i= 4,id(140718108612352)
i= 9,id(140718108612512)
i= 16,id(140718108612736)
i= 25,id(140718108613024)
>>> t
>>> for i in range(6):
t = t**2
print('i= %s,id(%s)=%s '%(i,i,id(i)))
i= 0,id(0)=140718108612224
i= 1,id(1)=140718108612256
i= 2,id(2)=140718108612288
i= 3,id(3)=140718108612320
i= 4,id(4)=140718108612352
i= 5,id(5)=140718108612384
>>> t
页:
[1]