Python:删除具有重复项的特定项目,只知道列表中的索引

时间:2017-12-04 15:09:11

标签: python python-3.x list

我希望这个程序能够删除列表中跟随索引的所有1的所有1。

这是代码:

a = [3, 1, 2, 1]
a.remove(a[3])
print(a)

我真的把这个程序放到了基础知识中,但重点是我只得到了2之后的1的索引,当我这样做时结果是:

[3, 2, 1]

这意味着它不会删除我想要的1但只删除它找到的第一个1。在实际的程序情况下,这确实是一个问题,其中第一个是重要值。

我该如何解决?谢谢

7 个答案:

答案 0 :(得分:0)

您可以使用列表理解:

a = [3, 1, 2, 1]
new_a = [c for i, c in enumerate(a) if c != 1 and i+1 < len(a) and a[i+1] != 2]+[a[-1]]

输出:

[3, 2, 1]

答案 1 :(得分:0)

我会使用 good-ol&#39; 显式循环:

a = [3, 1, 2, 1]
b = [a[0]]

for i, item in enumerate(a[1:], 1):
  if item == 1 and a[i-1] == 2:
    continue
  else:
    b.append(item)
print(b)  # -> [3, 1, 2]

请注意,a不会被修改,而是会创建一个新列表b

答案 2 :(得分:0)

如果要删除特定索引,请使用del

a = [3, 1, 2, 1]
del a[3]
print(a)

输出:

[3, 1, 2]

答案 3 :(得分:0)

del关键字可能是您最好的选择,例如:

a = [3, 1, 2, 1]
index = 1
while index < len(a):
    if a[index - 1] == 2 and a[index] == 1:
        del a[index]
    else:
        index += 1
print(a)

答案 4 :(得分:0)

我不知道更多pythonic方法,但您可以保留一个计数器来检查要从列表中删除的值的第二次出现。

a = [3, 1, 2, 1]
counter = 0

for i, v in enumerate(a):
    if v==1:
        if counter == 1:
            del a[i]
        else:
            counter += 1

print a

#output: [3, 1, 2]

答案 5 :(得分:0)

将列表理解与enumerate(a)index(2)

一起使用
[j for i,j in enumerate(a) if not (i>a.index(2) and j==1)]
#[3, 1, 2]

答案 6 :(得分:0)

使用enumerate()和列表理解:

>>> a = [3, 1, 2, 1]
>>> [v for i, v in enumerate(a) if not i or not (v == 1 and a[i-1] == 2)]
[3, 1, 2]