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

for k in my_list:

    if k > 6:
        #delete k

k如果它大于某个值,如何从列表中删除?

4

6 回答 6

3

您不应该更改您正在迭代的列表,只需创建一个新列表并将其分配给一个变量:

my_list = [k for k in my_list if k <= 6]
于 2013-02-06T06:48:44.840 回答
1

要从 a 中删除元素,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]
于 2013-02-06T06:50:28.277 回答
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
于 2013-02-06T06:51:05.617 回答
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]
于 2013-02-06T10:00:33.850 回答
0

您可以使用列表推导。

k = [i for i in k if i <= 6]

或者filter(注意在 Python 3 中它将返回一个filter对象,您可以将其转换为列表)

k = filter(lambda x: x <= 6, k)

上述两个选项将做同样的事情。

于 2013-02-06T06:48:16.183 回答
0

尝试这个,

>>> my_list= [i for i in my_list if i <= 6]
>>> print my_list
[0, 1, 2, 3, 4, 5, 6]
>>> 
于 2013-02-06T06:48:49.870 回答