(Python)我需要删除列表中的重复元素(使用remove funct;避免类型转换)。试图确定我的解决方案不正确的原因
规格: 我想使用remove函数(在列表中),我更希望避免类型转换(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.
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)代码,并且比自己做要快得多。