Python 循环遍历一个排序列表,找到重复项所在的范围
我试图找到列表中重复位置的范围。 例如,在列表中,l=[1,1,2,2,2,3,3,4,5,6,7,7]2在位置2和位置5之间重复。我的代码一直工作到最后,因为我假设内部循环没有跟踪数组的长度而导致错误 我应该如何着手修复此错误 代码:Python 循环遍历一个排序列表,找到重复项所在的范围,python,list,Python,List,我试图找到列表中重复位置的范围。 例如,在列表中,l=[1,1,2,2,2,3,3,4,5,6,7,7]2在位置2和位置5之间重复。我的代码一直工作到最后,因为我假设内部循环没有跟踪数组的长度而导致错误 我应该如何着手修复此错误 代码: l=[1,1,2,2,2,3,3,4,5,6,7,7] i=0 out=[] 而我>> >>>i=0 >>>out=[] >>>ogPos=i >>>ogVal=l[i] >>>而我
l=[1,1,2,2,2,3,3,4,5,6,7,7]
i=0
out=[]
而我<(len(l)):
ogPos=i
ogVal=l[i]
而(l[i]==ogVal):
印刷品(一)
i+=1
edPos=i-1
打印(f'\t{ogPos}\t{edPos}\t{ogVal})
输出:
0
1
0 1 1
2
3
4
5
2 5 2
6
7
8
6 8 3
9
9 9 4
10
10 10 5
11
11 11 6
12
13
14
Traceback (most recent call last):
File "testlist.py", line 8, in <module>
while (l[i] == ogVal):
IndexError: list index out of range
0
1.
0 1 1
2.
3.
4.
5.
2 5 2
6.
7.
8.
6 8 3
9
9 9 4
10
10 10 5
11
11 11 6
12
13
14
回溯(最近一次呼叫最后一次):
文件“testlist.py”,第8行,在
而(l[i]==ogVal):
索引器:列表索引超出范围
由于内循环前进了i
,它还应该对照列表的长度进行检查,就像外循环一样:
而我<(len(l)):
ogPos=i
ogVal=l[i]
而(i
您不需要嵌套的循环,使用for
循环可以更容易地遵循代码。对于嵌套循环,您需要重复长度约束,但您可以只使用一个,而不使用重复约束的循环:
l=[1,1,2,2,2,2,3,3,4,5,6,7]
>>>
>>>i=0
>>>out=[]
>>>ogPos=i
>>>ogVal=l[i]
>>>而我
您不必在外部循环中定义ogPos
和ogVal
,只需在循环外部定义它,并在发现更改时重置它,而不用在数字相同时迭代
for循环版本更简单,只需将而替换为for i in range(len(l))
:
l=[1,1,2,2,2,2,3,3,4,5,6,7]
>>>
>>>i=0
>>>out=[]
>>>ogPos=i
>>>ogVal=l[i]
>>>对于范围内的i(len(l)):
... 印刷品(一)
... 如果我[我]!=奥格瓦尔:
... edPos=i-1
... ogPos=i
... ogVal=l[i]
... 打印(f'\t{ogPos}\t{edPos}\t{ogVal})
...
0
1.
2.
2 1 2
3.
4.
5.
6.
6 5 3
7.
8.
9
9 8 4
10
10 9 5
11
11 10 6
12
12 11 7
13
14