Python判断列表输入索引是否存在并输出值的代码问题求解
问题场景
Python开发中需要实现功能:接收键盘输入的列表索引,若索引有效则输出对应列表元素,索引无效则输出位置不存在提示。原有两段代码运行不符合预期。
原有代码错误原因分析
第一段代码问题
l = ['Poland', 'Spain','France'] variable=int(input('give me the position')) for i in range(len(l)): if(i==variable): print(l[i]) else: print('the position does not exist')
错误核心逻辑:遍历列表每个索引的过程中,只要当前遍历到的索引和输入值不相等,就会触发不存在提示,单次循环对应一次输出:
- 输入位置2时,循环遍历i=0、i=1阶段都会进入else分支打印不存在提示,直到i=2时才打印对应元素,因此会先出现2次错误提示再输出正确值
- 输入超出范围的位置时,所有循环都会进入else分支,就会连续打印3次错误提示
第二段代码问题
if(l[variable]in l): print(l[variable]) else: print('does not exist')
错误核心逻辑:判断执行顺序错误。代码运行时会先执行l[variable]的取值操作,如果输入的是超出列表范围的索引,这一步会直接抛出IndexError: list index out of range报错,根本不会走到后续的成员判断逻辑。即使索引合法,这个判断逻辑也存在冗余和误判风险(比如列表存在重复元素时),完全不需要先取值再判断元素是否在列表内。
正确实现方案
方案1:索引范围判断(逻辑直观易理解)
列表合法正向索引范围是0 <= 输入值 < 列表长度,直接做区间判断即可,无需遍历列表:
l = ['Poland', 'Spain', 'France'] variable = int(input('give me the position')) if 0 <= variable < len(l): print(l[variable]) else: print('the position does not exist')
方案2:异常捕获(Python常用编码风格)
直接尝试按输入索引取值,捕获索引越界异常即可,不需要提前计算列表长度:
l = ['Poland', 'Spain', 'France'] variable = int(input('give me the position')) try: print(l[variable]) except IndexError: print('the position does not exist')
补充:如果需要兼容用户输入非整数的场景,可以额外增加一层ValueError捕获,处理输入内容无法转成整数的情况。
内容的提问来源于stack exchange,提问作者nooby
相关产品推荐
相关产品推荐

