我正在尝试在列表中循环弹出元素
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的元素
答案 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]