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