Python列表循环
在这段代码中,我试图删除列表中每个重复的元素,并使所有元素都唯一且不重复,因此当我运行这段代码时,给我一个错误:Python列表循环,python,python-3.x,list,for-loop,Python,Python 3.x,List,For Loop,在这段代码中,我试图删除列表中每个重复的元素,并使所有元素都唯一且不重复,因此当我运行这段代码时,给我一个错误: myList = [1, 2, 4, 4, 1, 4, 2, 6, 2, 9] repeat = 0 for i in range(len(myList)-1): for j in range(len(myList)-1): if myList[i]== myList[j]: repeat+=1 if repea
myList = [1, 2, 4, 4, 1, 4, 2, 6, 2, 9]
repeat = 0
for i in range(len(myList)-1):
for j in range(len(myList)-1):
if myList[i]== myList[j]:
repeat+=1
if repeat>1:
del myList[j]
print("The list with unique elements only:")
print(myList)
出现的错误是:
Traceback (most recent call last):
File "main.py", line 8, in <module>
if myList[i]== myList[j]:
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“main.py”,第8行,在
如果myList[i]==myList[j]:
索引器:列表索引超出范围
为什么会发生这种情况?我如何解决它?您可以将列表转换为集合,它将自动删除所有重复的元素
a = [1, 2, 4, 4, 1, 4, 2, 6, 2, 9]
unique_list = list(set(a))
print(a)
注意:我们再次将set转换为list这里的开头是删除列表中的一些元素,使其更短 由于for循环在原始列表的长度上运行,因此您最终将尝试访问一个不再存在的索引。这将导致“列表索引超出范围” 要亲自查看,可以添加打印语句,如下所示:
myList = [1, 2, 4, 4, 1, 4, 2, 6, 2, 9]
repeat = 0
for i in range(len(myList)-1):
for j in range(len(myList)-1):
print(i,j,len(myList))
if myList[i]== myList[j]:
repeat+=1
if repeat>1:
del myList[j]
在数组上循环时修改它是一个非常糟糕的主意,因为您无法控制处理事情的方式 我可以为你的问题提出这两种解决方案吗。 第一种是使用set
myList=[1,2,4,4,1,4,2,6,2,9]
myList=列表(集合(myList))
打印(“仅包含唯一元素的列表:”)
打印(myList)
另一种解决方案是使用另一个数组
myList=[1,2,4,4,1,4,2,6,2,9]
uniques=[]
对于myList中的数字:
如果编号不是唯一的:
uniques.append(编号)
打印(“仅包含唯一元素的列表:”)
打印(uniques)
Python中的
设置数据类型用于消除重复性。每当需要查看任何迭代器时,只要其中包含唯一的值,就可以将其转换为一个集合,从而删除所有重复的值。例如:
lis=[2,2,3,4]
l=set(lis)
print(l)
输出:
{2, 3, 4}
{2, 3, 4}
[2, 3, 4]
[1, 2, 4, 6, 9]
可以将其转换回列表:
lis=[2,2,3,4]
l=set(lis)
print(l)
l=list(l)
print(l)
输出:
{2, 3, 4}
{2, 3, 4}
[2, 3, 4]
[1, 2, 4, 6, 9]
同样地:
myList = [1, 2, 4, 4, 1, 4, 2, 6, 2, 9]
s=set(myList)
l=list(s)
print(l)
输出:
{2, 3, 4}
{2, 3, 4}
[2, 3, 4]
[1, 2, 4, 6, 9]
冻结集也可用于此目的。虽然;冻结集的元素在创建后保持不变,即它们不能被修改,不像集合中的元素是可变的(可以修改)。希望这是有帮助的 比如说,列表中有3个元素。找到重复并删除1。但是循环是从0到2的迭代。因此,当say
i
变为2时,myList[i]
不存在,这就是为什么会出现错误这是否回答了问题,@kuro这是一个有用的注释,这就是我的错误,非常感谢。@Sushanth这很好,但我不必使用列表以外的任何东西,也不必为循环使用列表集之类的内置函数。这是否回答了您的问题?这是一个很好的解决方案,谢谢,但是对于第一个,我不能使用任何内置函数,比如list和set,所以我使用了第二个解决方案,这是正确的。