Python按标识符合并可变数量列表问题求助
解决思路与代码实现
嘿,刚从VBA转Python确实会碰到一些思路转换的小问题,不过你这个需求其实很容易搞定~核心就是通过字符串找到对应的列表,再完成拼接,我给你分步讲清楚:
第一步:用字典映射变量名与列表(更安全可控)
在Python里,直接通过字符串调用变量名虽然可以用globals(),但新手用字典来做映射会更清晰,也不容易出错。先把你所有的列表放到一个字典里:
# 建立变量名到对应列表的映射 list_map = { 's1a': [1, 2, 3], 's1b': [2, 3, 4], 's2a': [3, 4, 5], 's2b': [4, 5, 6], 's3a': [5, 6, 7], 's3b': [6, 7, 8] }
第二步:处理result中的组合字符串
观察你给出的组合(比如s2as1a),每个组合都是两个3字符的标识符连在一起,所以我们可以通过字符串切片拆分出两个列表名,再从字典里取出列表拼接:
result = ['s2as1a', 's1bs2a', 's1as3b', 's2as3a'] # 用来存储最终拼接结果的字典 final_results = {} for combo in result: # 拆分组合字符串:前3个字符是第一个列表名,后3个是第二个 list1_name = combo[:3] list2_name = combo[3:] # 从字典中取出列表并拼接 combined = list_map[list1_name] + list_map[list2_name] # 把结果存入字典,键是组合名,值是拼接后的列表 final_results[combo] = combined
测试结果
现在你可以通过final_results获取每个组合对应的列表了:
print(final_results['s2as1a']) # 输出: [3, 4, 5, 1, 2, 3] print(final_results['s1bs2a']) # 输出: [2, 3, 4, 3, 4, 5]
为什么不用直接调用变量名?
如果你尝试用globals()[list1_name]也能拿到列表,但这种方式会读取全局作用域里的所有变量,万一有重名的变量就会出问题。用字典的话,你能明确控制哪些列表参与映射,更适合新手维护代码~
内容的提问来源于stack exchange,提问作者B.A.
相关产品推荐
相关产品推荐

