标题肯定令人困惑,所以这里有一个例子:假设我有一个值列表 [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 ]。
