吉吉喆 发表于 2021-9-12 22:04:45

关于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'

感激不尽~~~

傻眼貓咪 发表于 2021-9-12 22:16:34

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-13 08:29:56

傻眼貓咪 发表于 2021-9-12 22:16
正確寫法:

谢谢谢谢~但是我看了小甲鱼的视频,图片中为啥可以用A=*3呀

洛阳城 发表于 2021-9-13 09:08:48

本帖最后由 洛阳城 于 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 12:00:56

本帖最后由 傻眼貓咪 于 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)[, , ]
[, , ]

一般人不會深入了解指向對象問題,所以最後問題一堆堆

xjy=lwy 发表于 2021-9-13 12:39:56

吉吉喆 发表于 2021-9-13 08:29
谢谢谢谢~但是我看了小甲鱼的视频,图片中为啥可以用A=*3呀

因为这里直接把A 给修改成 *3了而不是用方法去添加

吉吉喆 发表于 2021-9-17 10:26:15

傻眼貓咪 发表于 2021-9-13 12:00
小魚甲視頻沒有錯,確實也是可以用的。很多人都有用,當然包括我。
只是你必須要清楚知道你之後你想對 ...

感恩

吉吉喆 发表于 2021-9-17 10:26:50

xjy=lwy 发表于 2021-9-13 12:39
因为这里直接把A 给修改成 *3了而不是用方法去添加

谢谢谢谢~感恩的心
页: [1]
查看完整版本: 关于python二维列表生成的求助