Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表循环_Python_Python 3.x_List_For Loop - Fatal编程技术网

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,所以我使用了第二个解决方案,这是正确的。