从for循环中的列表中删除。蟒蛇

时间:2013-02-06 06:46:30

标签: python list function for-loop

my_list = [0,1,2,3,4,5,6,7,8,9,10]

for k in my_list:

    if k > 6:
        #delete k

如果列表中的k大于某个值,该怎么办?

6 个答案:

答案 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]