my_list = [0,1,2,3,4,5,6,7,8,9,10]
for k in my_list:
if k > 6:
#delete k
k
如果它大于某个值,如何从列表中删除?
您不应该更改您正在迭代的列表,只需创建一个新列表并将其分配给一个变量:
my_list = [k for k in my_list if k <= 6]
要从 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]
我将在最后开始循环,它不会移动索引:
my_list = [0,1,2,3,4,5,6,7,8,9,10]
for k in my_list[::-1]:
if k > 6:
del k
如果要删除列表中所有大于指定值的元素。您可以使用排序和切片。
我建议使用 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]
您可以使用列表推导。
k = [i for i in k if i <= 6]
或者filter
(注意在 Python 3 中它将返回一个filter
对象,您可以将其转换为列表)
k = filter(lambda x: x <= 6, k)
上述两个选项将做同样的事情。
尝试这个,
>>> my_list= [i for i in my_list if i <= 6]
>>> print my_list
[0, 1, 2, 3, 4, 5, 6]
>>>