当我运行以下代码时,出现错误:
def genSet(nums):
for i in range(0, len(nums)-1):
for x in range(0, len(nums)-1):
if nums[x] == nums[i]:
del nums[x]
return nums
a = [5, 4, 3, 5, 6, 7, 8, 5, 4, 3]
print genSet(a)
输出:
Traceback (most recent call last):
File "49.py", line 9, in <module>
print genSet(a)
File "49.py", line 4, in genSet
if nums[x] == nums[i]:
IndexError: list index out of range
据我所知(我用“print x,i”替换了if语句)两个for循环很好,为什么索引超出范围?
答案 0 :(得分:5)
不要del nums[x]
,因为这样可以缩短nums
,从而获得例外。
您可以通过set_nums = set(nums)
答案 1 :(得分:3)
您正在从nums
中删除元素,因此它会变短并发生IndexError。
无论如何,你的代码会删除所有内容,因为每个元素在列表中至少有一个相同的元素(本身!)。如果要创建“唯一”元素列表,请创建一个集合:
unique_set = set(nums)
并再次将其转换为列表:
unique_list = list(set(nums))
答案 2 :(得分:0)
您可以找到数字相同的索引,将列表设置为numpy数组nums = np.array(nums)
并使用np.delete
命令。
答案 3 :(得分:0)
您提供的示例可以简单地用一行代码替换:
print set([5, 4, 3, 5, 6, 7, 8, 5, 4, 3])
如果我真的想自己过滤掉列表中的副本,我会:
nums = sorted([5, 4, 3, 5, 6, 7, 8, 5, 4, 3])
print reduce(lambda x,y:(y not in x and x+[y]) or x, nums, [])