使用if和for实现列表去重时遭遇IndexError索引越界问题求助
问题分析与解决
咱们先来拆解你遇到的问题,再一步步修复代码~
为什么会出现IndexError?
你初始化的mylist一开始是空列表,但在第一个for i in range(n)循环里,你直接尝试访问mylist[i]——这时候列表里还没有任何元素,长度为0,根本不存在第i个位置的元素,自然会抛出索引越界的错误。
除此之外,你的代码还有两个核心逻辑错误:
- 嵌套循环导致输入次数错误:你用了两层
range(n)的循环,这会让你总共输入n×n个元素,而不是你需要的n个,完全不符合需求。 - 去重逻辑完全颠倒:你应该检查新输入的元素是否已经存在于当前列表,而不是去比较列表里还不存在的元素(毕竟一开始列表是空的)。
正确的实现方案(仅用for和if)
我们可以用两种思路实现:边输入边去重,或者先收集所有元素再去重,两种都符合“仅用for和if”的要求。
方案一:边输入边去重(更高效)
n = int(input('enter the number of elements in your list ')) unique_list = [] for _ in range(n): # 输入元素,如果需要处理数字,记得转成int:ele = int(input('Enter element: ')) ele = input('Enter element: ') # 标记当前元素是否重复 is_duplicate = False # 遍历已有的列表,检查是否存在相同元素 for item in unique_list: if ele == item: is_duplicate = True break # 找到重复就提前退出循环 # 如果不是重复元素,就添加到列表里 if not is_duplicate: unique_list.append(ele) print(unique_list)
方案二:先收集所有元素,再去重
如果你想先把所有元素都收集起来,再做去重处理,可以用这个版本:
n = int(input('enter the number of elements in your list ')) mylist = [] # 第一步:收集所有输入的元素 for _ in range(n): ele = input('Enter element: ') mylist.append(ele) # 第二步:对收集到的列表去重 unique_list = [] for item in mylist: exists = False for existing in unique_list: if item == existing: exists = True break if not exists: unique_list.append(item) print(unique_list)
测试示例
比如输入7,然后依次输入2,3,4,5,4,6,5,两种方案都会输出['2', '3', '4', '5', '6'](如果转成int的话就是[2,3,4,5,6])。
内容的提问来源于stack exchange,提问作者Amr Abbas
相关产品推荐
相关产品推荐

