如何创建含变量名的嵌套列表?Python多列表处理需求
问题描述
现有多个列表,示例如下:
group1 = ["AS", "AT", "AW"] group2 = ["Bob", "Steve"] group3 = ....
想要创建如下新列表(将每个数据点与其所属的列表变量名配对):
combined = [["AS", "group1"], ["AT", "group1"], ["AW", "group1"], ["Bob", "group2"], ["Steve", "group2"]....]
已找到处理单个列表的代码:
one_list_at_time = [] for item in group1: temp = item, [i for i, a in locals().items() if a == group1][0] one_list_at_time.append(temp)
但无法写出同时处理多个列表的代码,尝试的代码如下(问题出在标注的行):
all_groups = group1 + group2 + .... + groupn all_data = [] for item in all_groups: # 问题出在下面这行 temp = item, [i for i, a in locals().items() if a == item][0] all_data.append(temp)
希望得到简单易实现的方案,仅用group1和group2时,all_data的输出需与上述combined一致。
简单易实现的解决方案
不要通过locals()反向查找变量名,这种方式容易因重复值、变量冲突等问题出错,直接显式将每个列表与对应名字配对处理更可靠:
# 把需要处理的列表和对应的名字打包成元组,存入一个列表 groups_with_names = [("group1", group1), ("group2", group2)] # 新增列表时,直接添加("group3", group3)即可 all_data = [] for name, group in groups_with_names: for item in group: all_data.append([item, name])
说明
- 先构建
groups_with_names,其中每个元素是(列表名字符串, 列表本身)的元组,明确关联列表和它的名字。 - 外层循环遍历每一组(名字,列表),内层循环遍历列表中的每个元素,将元素与对应名字组成子列表,添加到
all_data中。
这种方式逻辑直白,无额外隐式操作,新手容易理解和扩展,测试group1和group2的场景时,输出完全符合预期的combined结构。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

