my_list = [0,1,2,3,4,5,6,7,8,9,10]
for k in my_list:
if k > 6:
#delete k
如果列表中的k
大于某个值,该怎么办?
答案 0 :(得分:3)
您不应该更改要迭代的列表,只需创建一个新列表并分配它 变量:
my_list = [k for k in my_list if k <= 6]
答案 1 :(得分:1)
要从list
中删除元素,您可以使用remove
方法。
但是您必须考虑到,在迭代list
时删除元素会导致未定义的行为。例如:
>>> L = [1,2,3,4,5]
>>> for x in L:
... L.remove(x)
...
>>> L #should be empty
[2, 4]
如果你想避免这种情况,你可以使用列表推导创建一个新的list
,或者只是迭代列表的副本:
>>> L = range(10)
>>> [x for x in L if x <= 6]
[0, 1, 2, 3, 4, 5, 6]
>>> for x in L[:]:
... if x > 6:
... L.remove(x)
...
>>> L
[0, 1, 2, 3, 4, 5, 6]
答案 2 :(得分:0)
您可以使用列表理解。
k = [i for i in k if i <= 6]
或filter
(请注意,在Python 3中它将返回一个filter
对象,您可以将其转换为列表)
k = filter(lambda x: x <= 6, k)
以上两个选项也会做同样的事情。
答案 3 :(得分:0)
试试这个,
>>> my_list= [i for i in my_list if i <= 6]
>>> print my_list
[0, 1, 2, 3, 4, 5, 6]
>>>
答案 4 :(得分:0)
我将在结束时开始循环,它不会移动索引:
my_list = [0,1,2,3,4,5,6,7,8,9,10]
for k in my_list[::-1]:
if k > 6:
del k
答案 5 :(得分:0)
如果要删除列表中大于指定值的所有元素。您可以使用排序和切片。
我建议使用set而不排序或删除或等等等等......:P
a = [3,1,2,4,5,6,8,9,0,7]
然后排序
a = a.sort() #a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
idx = a.index(6) #idx=6
然后切片
a = a[0:idx] # a = [0, 1, 2, 3, 4, 5]
或替代方案是使用set
。使用指定限制的range
创建另一个列表,例如,您要从4 to 8
删除所有元素,然后
rm = xrange(4,8+1)
a = list(set(a) - set(rm)) # a = [0, 1, 2, 3, 9]