如何将嵌套列表解包为多个独立变量?
列表解包为多个独立变量的通用方案
固定数量子列表的场景
如果提前明确子列表的数量,直接用Python的解包语法就能快速实现需求:
scores = [['S', 'R'], ['A', 'B'], ['X', 'Y'], ['P', 'Q']] a, b, c, d = scores
执行后a、b、c、d会分别指向原列表中的四个独立子列表对象,修改其中一个不会影响其他子列表(示例中为不可变的字符串元素,无需额外拷贝)。
动态数量子列表的通用方案
如果子列表的数量不固定,没法提前写死变量名,可以通过操作全局命名空间字典来动态生成变量:
scores = [['S', 'R'], ['A', 'B'], ['X', 'Y'], ['P', 'Q']] # 按a、b、c...的顺序生成变量名 for idx, sub_list in enumerate(scores): var_name = chr(ord('a') + idx) globals()[var_name] = sub_list
如果子列表数量超过26个,可调整命名规则为a1、a2这类格式:
for idx, sub_list in enumerate(scores, start=1): var_name = f'a{idx}' globals()[var_name] = sub_list
注意事项
动态创建变量会污染命名空间,容易和现有变量重名引发意外问题,不推荐在正式代码中使用。更稳妥的替代方案是使用命名元组,既能实现类似变量名的访问方式,又不会污染命名空间:
from collections import namedtuple # 生成对应数量的字段名,比如group1、group2... field_names = [f'group{idx+1}' for idx in range(len(scores))] ScoreGroups = namedtuple('ScoreGroups', field_names) groups = ScoreGroups(*scores) # 访问方式:groups.group1、groups.group2...
内容的提问来源于stack exchange,提问作者Gonde94
相关产品推荐
相关产品推荐

