Re: [問題] append的問題

作者: ddavid (謊言接線生)   2022-04-08 16:51:37
※ 引述《unfinish (笑吟吟的淫淫笑)》之銘言:
: 最近也在自學python 也有關於append的問題
: 想問一下
: 1.這種列表裡頭包列表的套娃式架構用途是什麼?
這問題沒有什麼標準答案啊,當你有一群適合用 list 來管理的物件,這群物件
各自又擁有適合用 list 來管理的元素,自然就會這麼使用啦。
例如說,班上有 n 位同學,我們要調查並儲存這 n 位同學家中有哪些成員。
families = [
["爸爸", "媽媽"],
["爸爸", "媽媽", "哥哥", "妹妹"],
["爺爺", "爸爸", "媽媽", "弟弟"],
["媽媽"]
]
n 位同學看來很容易用 list 來存取,以 (學號 - 1) 當第一層 index。而家中
成員就單純要列舉而已,所以也可以用 list 來存,自然就可以這麼用。
: 2.要怎麼直接調用列表裡的列表值?
以上為例,如果我們要存取學號 3 號的同學家中的第 2 個成員:
print(families[2][1]) # 從 0 開始所以不是取[3][2]而是[2][1],"爸爸"
但是你會注意到,不是每個同學都有兩個以上家人。4 號同學你取第 2 個家人
,自然就會出問題了。這個時候我們就要考慮:
1. 這麼存可以做到什麼?
2. 如果這麼存做不到(或效率不好)想做的事該怎麼修改?
像 list 的特性就是用 index 直接存取,超出長度會爛掉。也就是說在不能確
定每個內層長度相同的情況下,直接取內層的固定 index 也許就不是好用途,應該
換成 list 以外的儲存方式,例如 set 或 dict 之類。
那什麼用途比較有用?
例如內層是固定個數或有最小個數,所以取某個範圍內的 index 不會取不到。
或者有特殊順序,比如 index 0 一定要填上監護人,所以取 families[x][0] 一定
能取到值。
或是一開始說的,內層就單純要列舉而已,沒有要對內層取 index:
for id in range(len(families)):
print(f"同學 {id + 1} 的家族成員:")
print(families[id]) # 直接印出每一個同學的家人列表
for member in families[id]:
print(f"同學 {id + 1} 有 {member}") # 也是列出同學的家人列表,
# 但是一個一個列
或是對內層有無關列表長度的運算:
for id in range(len(families)):
if "妹妹" not in families[id]:
print(f"同學 {id + 1} 醒醒吧,你沒有妹妹")
: 所以...要怎麼做才能直接調用?
: 請各位大大指教,謝謝~

Links booklink

Contact Us: admin [ a t ] ucptt.com