我希望这个程序能够删除列表中跟随索引的所有1的所有1。
这是代码:
a = [3, 1, 2, 1]
a.remove(a[3])
print(a)
我真的把这个程序放到了基础知识中,但重点是我只得到了2之后的1的索引,当我这样做时结果是:
[3, 2, 1]
这意味着它不会删除我想要的1但只删除它找到的第一个1。在实际的程序情况下,这确实是一个问题,其中第一个是重要值。
我该如何解决?谢谢
答案 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]