如何基于给定数据构建二维列表并实现指定索引访问?
搞定你的二维列表需求
嘿,我来帮你理清这个问题!你现在的代码只是把两个一维列表简单嵌套,所以hormones_list[0][0]只能取出name_list里的第一个名字William,没法关联到他的周一数据。咱们一步步来解决:
1. 构建符合需求的二维列表
要实现hormone_list[0][0]返回William的周一数据,咱们得把二维列表的结构改成第一维度对应人名,第二维度对应星期几——也就是每个子列表存储一个人的七天数据。示例代码如下:
# 基础列表定义 name_list=['William','Laura','Robert','Alicia','Sharon','Jack','Mary','Edward','Jessie','Debra'] day_list=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'] # 初始化二维列表:每个元素对应一个人的一周数据(这里先用0占位,你可以替换成实际值) hormone_list = [[0 for _ in day_list] for _ in name_list] # 给William的周一数据赋值(比如实际测量值) hormone_list[0][0] = 4.7 # 现在打印就能得到William的周一数据 print(hormone_list[0][0]) # 输出 4.7
2. 临时存储独立列表的方法
如果你想单独存储每个人的单日数据列表,完全可以用变量单独定义,再整合到二维列表里:
# 单独定义每个人的一周数据 william_daily = [4.7, 5.1, 4.9, 5.3, 4.8, 4.6, 4.5] laura_daily = [3.9, 4.2, 4.0, 4.3, 4.1, 3.8, 3.7] # 把这些独立列表整合到hormone_list hormone_list = [william_daily, laura_daily, ...] # 依次添加其他人的列表即可
3. 用条件/循环简化代码,避免逐个编写
手动写每个人的列表太繁琐,咱们可以用if结合循环来批量生成,甚至用字典映射来让代码更简洁:
方法一:if-elif结合循环
hormone_list = [] for name in name_list: # 初始化一周数据为默认值 daily_data = [0]*7 # 针对特定人员设置特定日期的数据 if name == 'William': daily_data[0] = 4.7 # 周一数据 elif name == 'Laura': daily_data[2] = 4.0 # 周三数据 # 可以继续添加更多人员的规则 hormone_list.append(daily_data)
方法二:字典映射(更简洁易维护)
如果需要设置的特殊数据较多,用字典来映射规则会更清晰:
# 定义特殊数据映射:{人名: {星期索引: 数据值}} special_mapping = { 'William': {0: 4.7}, 'Laura': {2: 4.0}, 'Jack': {4: 5.0} # 周五数据 } hormone_list = [] for name in name_list: daily_data = [0]*7 # 如果当前人名有特殊数据,就更新对应日期的值 if name in special_mapping: for day_idx, value in special_mapping[name].items(): daily_data[day_idx] = value hormone_list.append(daily_data)
小补充:更灵活的取值方式
如果担心列表顺序变化导致索引出错,可以结合index()方法来通过名字和日期直接取值:
# 获取William的周一数据 person_idx = name_list.index('William') day_idx = day_list.index('Monday') print(hormone_list[person_idx][day_idx]) # 同样输出4.7
内容的提问来源于stack exchange,提问作者kevx
相关产品推荐
相关产品推荐

