Skip to main content
 首页 » 编程设计

Python之如果两个值在列表中出现两次,则在两个值的索引之间删除

2025年05月04日16webabcd

标题肯定令人困惑,所以这里有一个例子:假设我有一个值列表 [1,2,3,2,1,4,5,6,7,8]。我想在列表中的两个 1 之间删除,并且通过 pythonic 方式它也将最终删除第一个 1 并输出 [1,4, 5,6,7,8]。不幸的是,由于我缺乏 pythonic 能力,我只能生成删除第一组的东西:

a = [1,2,3,2,1,4,5,6,7] 
uniques = [] 
junks = [] 
for value in a: 
    junks.append(value) 
    if value not in uniques: 
        uniques.append(value) 
for value in uniques: 
    junks.remove(value) 
for value in junks: 
    a.remove(value) 
    a.remove(value) 
a[0] = 1 
print(a) 
[1,4,5,6,7] 

适用于第一次出现的两次,不适用于较大列表中的下一次出现。我有一个想法,就是在第一次出现的索引和第二次出现的索引之间删除,这将保留第二次出现,而不是让我做一些愚蠢的事情,比如 a[0] = 1 但我是真的不确定如何实现它。

请您参考如下方法:

这会按照你的要求做吗:

a = [1, 2, 3, 2, 1, 4, 5, 6, 7, 8] 
 
def f(l): 
    x = l.copy() 
    for i in l: 
        if x.count(i) > 1: 
            first_index = x.index(i) 
            second_index = x.index(i, first_index + 1) 
            x = x[:first_index] + x[second_index:] 
    return x 

因此 f(a) 的输出将是 [1, 4, 5, 6, 7, 8] 而 f([ 1, 2, 3, 2, 1, 4, 5, 6, 7, 8, 7, 6, 5, 15, 16]) 将是 [1, 4, 5, 15, 16 ]。