从列表中删除循环/重复

2024-05-23 20:06:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个值列表,其中可能有也可能没有特定的元素循环。 我已经编写了下面的代码来提取列表中重复的索引和值的长度。我的问题是,我现在有多个重复的索引和值的长度。如何从主列表中删除这些元素以删除这些循环

data = [1,2,3,1,2,3,4,5,6,7,4,5,6,7,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,23,18]
minrun = 1
lendata = len(data)

for runlen in range(minrun, lendata // 2):
    i = 0
    while i < lendata - runlen * 2:
#         print("i",i)
#         print("runlen", runlen)
#         print(lendata - runlen * 2)
        s1 = data[i:i + runlen]
#         print("s1",s1)
        s2 = data[i + runlen:i + runlen * 2]
#         print("s2",s2)
        if s1 == s2:
            print(i, runlen, s1)
            i += runlen 
        else:
            i += 1

有更好的方法吗


Tags: 代码in元素列表fordatalenrange
1条回答
网友
1楼 · 发布于 2024-05-23 20:06:36

这可以工作,但我没有测试其他序列,我只测试了你的例子

data = [1,2,3,1,2,3,4,5,6,7,4,5,6,7,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,23,18]
print(data)

checkindex = []
for j in range(1, len(data)):
    for k in range(len(data)):
        try:
            if data[k] == data[j+k]:
                if j+k not in checkindex:
                    checkindex.append(j+k)  
        except IndexError:
            continue
checkindex = sorted(checkindex)
for i in range(len(checkindex)-1, -1, -1):
    del data[checkindex[i]]
print(data)

输出:

[1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 23, 18]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 23, 18]

说明:

for k in range(len(data)):
    if data[i+k] == data[j+k]:

基本上是这样的意思,例如j=3

data[0] == data[3+0]: True
data[1] == data[3+1]: True
data[2] == data[3+2]: True
data[3] == data[3+3]: False

对于每个True,追加(j+k)>;如果不是重复的话。我建议在这里和那里尝试打印以了解更多信息,例如:

data = [1,2,3,1,2,3,4,5,6,7,4,5,6,7,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,23,18]
print(data)

checkindex = []
for j in range(1, len(data)):
    for k in range(len(data)):
        try:
            if data[k] == data[j+k]:
                print(j, k, j+k)
                if j+k not in checkindex:
                    checkindex.append(j+k)  
        except IndexError:
            continue
    print(checkindex)
checkindex = sorted(checkindex)
for i in range(len(checkindex)-1, -1, -1):
    del data[checkindex[i]]
print(data)

您的输出将是:

[1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 23, 18]
[]
[]
3 0 3
3 1 4
3 2 5
[3, 4, 5]
4 6 10
4 7 11
4 8 12
4 9 13
4 10 14
4 11 15
4 12 16
4 13 17
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17]
8 6 14
8 7 15
8 8 16
8 9 17
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17]
10 14 24
10 15 25
10 16 26
10 17 27
10 18 28
10 19 29
10 20 30
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30]
14 10 24
14 11 25
14 12 26
14 13 27
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30]
18 3 21
18 4 22
18 5 23
18 6 24
18 7 25
18 8 26
18 9 27
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
21 0 21
21 1 22
21 2 23
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 24, 25, 26, 27, 28, 29, 30, 21, 22, 23]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 23, 18]

我个人认为打印声明有助于我更好地理解

相关问题 更多 >