(Python)我需要删除列表中的重复元素(使用删除功能;避免类型转换).试图确定为什么我的解决方案不正确



规格: 我想使用删除功能(在列表中(,我宁愿避免类型转换。

l = [2, 3, 3, 4, 6, 4, 6, 5]
q=len(l)
for i in range (0, q):
for g in range (i+1, q):
if l[g]==l[i]:
q-=1 #decremented q to account for reduction in list size.
l.remove(l[g])
print(l)

错误:if l[g]==l[i]:索引错误:列出索引超出范围

我知道用户以前也问过类似的问题。由于其中没有上述限制,我想请你把这个问题作为一个单独的问题来处理。谢谢!

>>> l = [2, 3, 3, 4, 6, 4, 6, 5]
>>> s = set(l)
>>> t = sorted(s)
>>> print(t)
[2, 3, 4, 5, 6]

使用set是筛选集合的一种简单直接的方法。如果您不需要按特定顺序排列的列表,则可以从那里开始使用该集。sorted函数返回一个列表(使用默认排序(。

既然你提到你不想要类型转换,所以我的解决方案是使用while loop

l = [2, 3, 3, 4, 6, 4, 6, 5]
q=len(l)
i = 0
while i<len(l):
g = i+1
while (g < q):
if l[g]==l[i]:
q-=1 #decremented q to account for reduction in list size.
l.remove(l[g])
g += 1
i += 1
print(l)

现在,请允许我解释一下您的代码中存在的问题。当您使用范围函数时,它会在循环的第一次运行时保留起始值和结束值,因此即使您之后在循环中更改限制,它仍然不会更改范围循环,因此最终会出错index out of bounds
希望这对您:)有所帮助

您的解决方案不起作用,因为 range(( 存储 q 的值,稍后将忽略 q 值的变化。例如:

>>> m = 10
>>> for i in range(m):
...  m=0
...  print(i)
... 
0
1
2
3
4
5
6
7
8
9

即使我更改 m,range(( 仍然会在循环中出现 10 次。因此,当您更改列表的大小时,即使您更改了 q,您仍然会尝试访问不再存在的元素。

相关内容

最新更新