iT邦幫忙

0

Python 如何預留串列獨立位址

  • 分享至 

  • xImage

以下是我的 Code:

YogaTeacher = ("Kino", "Laruga", "DanySa")
BasketballPlayer = ["MJ", "LBJ", "Shaq"]
temp = [[[], [], []]] * 3

for i,j in enumerate (YogaTeacher):
    if (j == "DanySa"):
        for k, l in enumerate (BasketballPlayer):
            temp[i][k] = l
            
print (temp)

使用 Python IDE Spyder 印出的 Console 如下所示:

[['MJ', 'LBJ', 'Shaq'], ['MJ', 'LBJ', 'Shaq'], ['MJ', 'LBJ', 'Shaq']]

但我想要的是:

[[[], [], []], [[], [], []], ['MJ', 'LBJ', 'Shaq']]

請問如何做到?([ [ [ ], [ ], [ ] ], [ [ ], [ ], [ ] ], [ [ ], [ ], [ ] ] ] 不切實際,如果要宣告大型串列根本打字打到死,我想要的是類似 C 語言 array[n][m] 的做法,再拜託各位大神了!)

froce iT邦大師 1 級 ‧ 2024-12-18 15:04:57 檢舉
你temp = [[[], [], []]] * 3這個會弄成3份淺拷貝,裡面的元素記憶體位置都會一樣,所以改裡面的任一組元素都會3組一起變動,建議用id(temp[0])這樣去觀察記憶體位置。

temp 那句改成 temp = [list(list() for i in range(3)) for i in range(3)]

但我的建議是:
1. 佔位符不要用[],你實際上只有用2維陣列,陣列內元素明明是字串,幹嘛用list去佔位?
2. 重新審視一下分配位置的演算法。
像你搜尋DanySa,你可以用YogaTeacher.index("YogaTeacher")去拿index
然後直接 temp[YogaTeacher.index("YogaTeacher")] = BasketballPlayer
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
淺水員
iT邦大師 6 級 ‧ 2024-12-18 15:05:17

python 的 list 是動態的
可以不用像 C 語言那樣一開始就宣告大小
利用 appned 可以把元素添加到最後

YogaTeacher = ("Kino", "Laruga", "DanySa")
BasketballPlayer = ["MJ", "LBJ", "Shaq"]
temp = []

for i,j in enumerate (YogaTeacher):
    students = []
    for k, l in enumerate (BasketballPlayer):
        if (j == "DanySa"):
            students.append(l)
        else:
            # 不知道為什麼你要空陣列
            students.append([])
    temp.append(students)

print (temp)
1
zivzhong
iT邦新手 3 級 ‧ 2024-12-18 15:46:02
YogaTeacher = ("Kino", "Laruga", "DanySa")
BasketballPlayer = ["MJ", "LBJ", "Shaq"]

# 初始化 temp 為三個獨立的子列表,每個子列表包含三個空列表
temp = [[[] for _ in range(3)] for _ in range(3)]

print("初始化 temp:")
print(temp)
print()

for i, j in enumerate(YogaTeacher):
    if j == "DanySa":
        for k, l in enumerate(BasketballPlayer):
            temp[i][k] = l

print("更新後的 temp:")
print(temp)

感謝三位大神,大家都回答得非常好,弱弱的我真是長知識了,最後我是採取 force 的做法,程式碼如下:

YogaTeacher = ("Kino", "Laruga", "DanySa")
BasketballPlayer = ["MJ", "LBJ", "Shaq"]
temp = [list (list () for i in range (3) ) for j in range (3)]
for i in range (len (BasketballPlayer)):
temp [YogaTeacher.index ("DanySa")][i] = BasketballPlayer[i]
print (temp)

站在巨人的肩膀上看得比較遠,希望我能實現我的夢想!

我要發表回答

立即登入回答