有没有办法在遍历列表时修改列表

时间:2019-06-11 09:13:18

标签: python list

我正在尝试在列表中循环弹出元素

for i, item in enumerate(lst):
    if item > 2:
        indexes.pop(i)

这是一种有效的方法,但是我认为这很丑陋,有没有更好的方法呢?

lst = [1, 1, 1, 1, 1, 1, 1, 6, 6, 6, 6, 1, 2, 2, 2, 2, 2]
indexes = []

print(lst) #[1, 1, 1, 1, 1, 1, 1, 6, 6, 6, 6, 1, 2, 2, 2, 2, 2]

removed_count = 0
for i, item in enumerate(lst):
    if item > 2:
        indexes.append(i)

for index in indexes:
    print(index)
    lst.pop(index - removed_count)
    removed_count += 1

print(lst) #[1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]

for i, item in enumerate(lst):
    if item > 2:
        indexes.pop(i)

我要从列表中删除所有> 6的元素

4 个答案:

答案 0 :(得分:2)

具有列表理解 new_list = [x for x in lst if x <= 2] 如果可以创建一个新列表

答案 1 :(得分:1)

您可以反向迭代列表并弹出项目:

lst = [1, 1, 1, 1, 1, 1, 1, 6, 6, 6, 6, 1, 2, 2, 2, 2, 2]

for i in range(len(lst)-1, -1, -1):
    if lst[i] > 5:
        lst.pop(i)

print(lst)

打印:

[1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]

答案 2 :(得分:1)

使用列表理解:

filtered = [i for i in your_list if i > 6]

答案 3 :(得分:0)

按照OP方法的解决方案

lst = [1, 1, 1, 1, 1, 1, 1, 6, 6, 6, 6, 1, 2, 2, 2, 2, 2]

index= []

# storing indexes

for i, value in enumerate(lst):
    if value>2:
        index.append(i)

# removing those indexes
count = 0


for i in index:           
    lst.pop(i-count) 
    count+=1

print(lst)

输出

[1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]