作者ddavid (谎言接线生)
看板Python
标题Re: [问题] append的问题
时间Fri Apr 8 16:51:37 2022
※ 引述《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} 醒醒吧,你没有妹妹")
: 所以...要怎麽做才能直接调用?
: 请各位大大指教,谢谢~
--
「珍贵的回忆?还不是跟梦一样虚幻不实的东西?你想要什麽样的回忆,我帮你
做出来啦!」
--艾蜜思,谎言事务所实现使者
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.32.17.60 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1649407899.A.53A.html
※ 编辑: ddavid (114.32.17.60 台湾), 04/08/2022 16:53:44