Python自定义函数未调用指定列表变量问题求助
解决输入列表名称无法正确调用对应列表的问题
我看你遇到的问题是:输入定义好的列表名称(比如default_list),程序却输出了字符串的首尾字符,而不是列表的首尾元素。这其实是因为你误解了input()函数的返回值类型,咱们一步步来解决:
问题根源
input(": ")获取到的是字符串,比如你输入"default_list",程序拿到的是字符串"default_list",而不是你定义的那个列表变量。当你把这个字符串传给list_ends函数时,chosen_list[0]取的是字符串的第一个字符'd',chosen_list[len(chosen_list)-1]取的是最后一个字符't',这就是为什么输出是['d', 't']。
另外,你的代码里还有个小问题:new_list是全局变量,每次调用list_ends都会往里面追加元素,多次调用的话列表会越来越长,不符合你想要每次生成新列表的需求。
解决方案
方法一:用字典做列表名称映射(推荐)
把所有定义好的列表放到一个字典里,键是列表名称的字符串,值是列表本身。这样用户输入字符串后,我们可以从字典里取出对应的列表,既安全又可控:
default_list = [5, 10, 15, 20, 25] first_list = [7, 233, 76, 234, 2] second_list = [0, 5, 2, 6, 3423456] third_list = [768, 56, 234, 765, 2434, 78676, 345, 467, 353, 765343] # 创建名称与列表的映射字典 list_mapping = { "default_list": default_list, "first_list": first_list, "second_list": second_list, "third_list": third_list } def list_ends(chosen_list): # 直接返回由首尾元素组成的新列表,避免全局变量的问题 return [chosen_list[0], chosen_list[-1]] # 获取用户输入的列表名称 input_name = input(": ") # 检查输入的名称是否在映射字典中 if input_name in list_mapping: result = list_ends(list_mapping[input_name]) print(result) else: print("输入的列表名称不存在,请检查!")
方法二:通过全局变量字典获取(不推荐,仅小脚本可用)
如果你只是写个小脚本,也可以用globals()函数获取全局变量字典,根据输入的字符串找到对应的列表。但这种方法会暴露所有全局变量,存在安全风险,不建议在正式代码中使用:
default_list = [5, 10, 15, 20, 25] first_list = [7, 233, 76, 234, 2] second_list = [0, 5, 2, 6, 3423456] third_list = [768, 56, 234, 765, 2434, 78676, 345, 467, 353, 765343] def list_ends(chosen_list): return [chosen_list[0], chosen_list[-1]] input_name = input(": ") try: # 从全局变量中获取对应名称的对象 target_list = globals()[input_name] # 验证是否为列表类型,避免误操作其他变量 if isinstance(target_list, list): print(list_ends(target_list)) else: print("输入的名称对应的不是列表!") except KeyError: print("输入的列表名称不存在,请检查!")
测试效果
比如输入default_list,程序会输出[5, 25],输入third_list则输出[768, 765343],完全符合你的需求啦!
内容的提问来源于stack exchange,提问作者Ryuha
相关产品推荐
相关产品推荐

