关于python二维列表生成的求助
求助大神,为啥用第二种方法生成的二维列表会报错{:10_266:}第一种:
>>> A=[]
>>> for i in range(3):
A.append([])
for j in range(3):
A.append(random.randint(0,3))
>>> A
[, , ]
第二种:
>>> A=*3
>>> for i in range(3):
for j in range(3):
A.append(random.randint(0,3))
Traceback (most recent call last):
File "<pyshell#25>", line 3, in <module>
A.append(random.randint(0,3))
AttributeError: 'int' object has no attribute 'append'
感激不尽~~~ import random
A = *3 # 這裡意思就是 A = 不是 A = [, , ]
for i in range(3):
for j in range(3):
A.append(random.randint(0, 3)) # 所以當然這裡也不能正常執行代碼
正確寫法:
A = [ for _ in range(3)] # 這裡意思就是 A = [ , , ]
B = [*3]*3
print(A) # 打印出:[, , ]
print(B) # 打印出:[, , ]
# 雖然 2者 看是一樣,但其實不一樣
A = 13
B = 13
print(A) # 打印出:[, , ] 這裡只是 A 位置的值改變
print(B) # 打印出:[, , ] 這裡對每個 B 裡的列表都做改變 傻眼貓咪 发表于 2021-9-12 22:16
正確寫法:
谢谢谢谢~但是我看了小甲鱼的视频,图片中为啥可以用A=*3呀 本帖最后由 洛阳城 于 2021-9-13 09:11 编辑
*3得到的是
因此type(A)是int,而int类型是不能调用append函数的
你仔细观察第一种方法中的第3句A.append([])
所以这里的type(A)是list,是可以调用append的哦
这里想要达到你的效果只需要把A=*3
改成A=[[]]*3即可 本帖最后由 傻眼貓咪 于 2021-9-13 17:17 编辑
吉吉喆 发表于 2021-9-13 08:29
谢谢谢谢~但是我看了小甲鱼的视频,图片中为啥可以用A=*3呀
小魚甲視頻沒有錯,確實也是可以用的。很多人都有用,當然包括我。
只是你必須要清楚知道你之後你想對列表做什麼,是否會有影響?
這是額外知識,當作送你吧:
A = *3 沒有問題(A = ),因為裡面沒有另外一個列表
但如果是 A = [*3]*3 (A = [, , )就要注意了
當你用這方法:A = [*3]*3 創建列表時候,就注定之後每當你想改其中一個元素,其它同位置元素跟著改,比如:
A = 13,這時候會變成 A = [, , ](不止A改變,A 和 A 跟著改變了)
A = [*3]*3 真正意思是將全部 A 裡面的元素(子列表)指向同一個對象
你不妨可以試試看用 A = [*3]*3 創建列表,什麼都嘗試,你就會明白我說的{:5_109:}
範例:
A = []*3
A = 13
print(A)
B = [[]]*3
B.append(13)
print(B)[, , ]
[, , ]
一般人不會深入了解指向對象問題,所以最後問題一堆堆 吉吉喆 发表于 2021-9-13 08:29
谢谢谢谢~但是我看了小甲鱼的视频,图片中为啥可以用A=*3呀
因为这里直接把A 给修改成 *3了而不是用方法去添加 傻眼貓咪 发表于 2021-9-13 12:00
小魚甲視頻沒有錯,確實也是可以用的。很多人都有用,當然包括我。
只是你必須要清楚知道你之後你想對 ...
感恩 xjy=lwy 发表于 2021-9-13 12:39
因为这里直接把A 给修改成 *3了而不是用方法去添加
谢谢谢谢~感恩的心
页:
[1]