Python 循环遍历一个排序列表,找到重复项所在的范围

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]2在位置2和位置5之间重复。我的代码一直工作到最后,因为我假设内部循环没有跟踪数组的长度而导致错误

我应该如何着手修复此错误

代码:

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