(Python)我需要删除列表中的重复元素(使用remove funct;避免类型转换)。试图确定我的解决方案不正确的原因

(Python)我需要删除列表中的重复元素(使用remove funct;避免类型转换)。试图确定我的解决方案不正确的原因,python,python-3.x,list,duplicates,runtime-error,Python,Python 3.x,List,Duplicates,Runtime Error,规格: 我想使用remove函数(在列表中),我更希望避免类型转换 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.

规格: 我想使用remove函数(在列表中),我更希望避免类型转换

 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)
错误:
如果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

而我您的解决方案不起作用,因为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,您仍将尝试访问不再存在的元素。

这是否回答了您的问题?你所说的“类型转换”是什么意思?类型转换对运行时(对于非常大的列表)有显著的影响吗?相反,set运行本机(C)代码,并且比自己做要快得多。