Python实现输入列表名与元素统计出现次数及TypeError报错解决
错误根因
你通过input()方法获取到的列表名称是字符串类型,并非你预先定义的列表对象本身。比如你输入list_1时,变量getList的实际值是字符串"list_1",你直接把这个字符串传入函数调用count方法时,字符串的count方法要求传入的参数也是字符串,你传入了转换后的整数,因此触发类型不匹配报错。
修复方案
我们可以用字典建立列表名称和实际列表对象的映射关系,既安全也能快速匹配到对应的列表:
# 预先定义的列表 list_1 = [1, 2, 4, 2, 5, 6, 7, 3, 5, 6, 3, 2, 1, 7, 8, 9, 3, 6, 5, 3, 4] list_2 = [12, 14, 13 , 11, 16, 15, 17, 18, 18, 19, 17, 15, 19, 11, 12, 14, 13] # 建立列表名称和对象的映射 list_map = { "list_1": list_1, "list_2": list_2 } def count_objects(wlist): read_o = int(input("input object: ")) print(f"元素出现次数为:{wlist.count(read_o)}") # 获取用户输入后先匹配对应的列表 getList = input("input list: ") if getList not in list_map: print("输入的列表名称不存在") else: count_objects(list_map[getList])
改动说明
- 新增了
list_map字典,用来关联用户输入的列表名字符串和实际的列表变量 - 增加了输入合法性校验,避免用户输入不存在的列表名称时报错
- 调用函数时传入的是字典映射后的实际列表对象,不是原来的字符串变量
也可以直接用globals()[getList]获取全局变量对应的列表,但这种方式存在安全风险,不推荐生产环境使用。
内容的提问来源于stack exchange,提问作者beginner
相关产品推荐
相关产品推荐

