如何根据用户输入的多个变量名合并对应Python列表?
问题:根据用户输入合并多个列表
现有Python代码如下:
rock = ['lightning', 'gun', ...] gun = ['lightning', 'sponge', ...] lightning = ['wolf', 'sponge', ...] devil = ['wolf', 'sponge', ...] dragon = ['wolf', 'sponge', ...] water = ['wolf', 'sponge', ...] air = ['wolf', 'sponge', ...] paper = ['wolf', 'sponge', ...] sponge = ['wolf', 'rock', ...] wolf = ['gun', 'rock', ...] tree = ['gun', 'rock', ...] human = ['gun', 'rock', ...] snake = ['gun', 'rock', ...] scissors = ['gun', 'rock', ...] fire = ['lightning', 'gun', ...] user_choice = input().split(",") print(user_choice[0] + user_choice[1], sep=", ")
需求说明:
根据用户输入的任意数量变量名,生成一个合并后的大列表。例如输入rock, gun时,需要得到合并后的列表:
['lightning', 'gun', ..., 'lightning', 'sponge', ...]
解决方案
直接使用零散变量无法动态根据输入字符串获取对应列表,因此需要先将所有列表存入字典,再处理用户输入完成合并。改进后的代码如下:
# 将所有列表存入字典,键对应原变量名 choice_lists = { 'rock': ['lightning', 'gun', ...], 'gun': ['lightning', 'sponge', ...], 'lightning': ['wolf', 'sponge', ...], 'devil': ['wolf', 'sponge', ...], 'dragon': ['wolf', 'sponge', ...], 'water': ['wolf', 'sponge', ...], 'air': ['wolf', 'sponge', ...], 'paper': ['wolf', 'sponge', ...], 'sponge': ['wolf', 'rock', ...], 'wolf': ['gun', 'rock', ...], 'tree': ['gun', 'rock', ...], 'human': ['gun', 'rock', ...], 'snake': ['gun', 'rock', ...], 'scissors': ['gun', 'rock', ...], 'fire': ['lightning', 'gun', ...] } # 处理用户输入,去除每个选项的前后空格 user_choice = [item.strip() for item in input().split(",")] # 初始化合并后的大列表 merged_list = [] # 遍历用户选择的每个名称,合并对应列表 for choice in user_choice: # 容错处理:若输入不存在的名称,给出提示 if choice in choice_lists: merged_list.extend(choice_lists[choice]) else: print(f"警告:不存在名为{choice}的列表") # 输出最终合并结果 print(merged_list)
关键步骤说明:
- 用字典存储列表:将独立变量转换为字典键值对,实现通过输入字符串直接获取对应列表,支持任意数量的输入项。
- 处理输入空格:使用
strip()去除输入项的前后空格,避免因输入带空格导致无法匹配字典键的问题。 - 遍历合并列表:使用
extend()方法将选中列表的元素添加到结果列表,相比+操作更高效(+会生成新列表,extend()直接在原列表追加)。 - 容错处理:增加存在性判断,避免因输入无效名称导致程序报错。
内容的提问来源于stack exchange,提问作者Breathe of fate
相关产品推荐
相关产品推荐

