从for循环中的列表中删除。python

从for循环中的列表中删除。python,python,list,function,for-loop,Python,List,Function,For Loop,如果大于某个值,如何从列表中删除k 您可以使用列表理解 my_list = [0,1,2,3,4,5,6,7,8,9,10] for k in my_list: if k > 6: #delete k 以上两个选项将做同样的事情。您不应该更改正在迭代的列表,只需创建一个新列表并分配它即可 对于变量: k = filter(lambda x: x <= 6, k) my_list=[k代表my_list中的k如果k试试这个 my_list = [k fo

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

您可以使用列表理解

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

for k in my_list:

    if k > 6:
        #delete k

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

您不应该更改正在迭代的列表,只需创建一个新列表并分配它即可 对于变量:

k = filter(lambda x: x <= 6, k)
my_list=[k代表my_list中的k如果k试试这个

my_list = [k for k in my_list if k <= 6]
>>我的\u list=[如果我在我的\u列表中为我打印我的\u列表
[0, 1, 2, 3, 4, 5, 6]
>>> 

要从
列表中删除元素,可以使用
删除
方法。
但您必须考虑到,在迭代
列表时删除元素会导致未定义的行为。例如:

>>> my_list= [i for i in my_list if i <= 6]
>>> print my_list
[0, 1, 2, 3, 4, 5, 6]
>>> 
如果要避免这种情况,可以使用列表理解创建一个新的
列表
,或者简单地迭代列表的副本:

>>> L = [1,2,3,4,5]
>>> for x in L:
...     L.remove(x)
... 
>>> L   #should be empty
[2, 4]
>L=范围(10)
>>>[x代表L中的x,如果x>>代表L中的x[:]:
…如果x>6:
…L.移除(x)
... 
>>>L
[0, 1, 2, 3, 4, 5, 6]

我将在循环结束时开始循环,循环不会移动索引:

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

如果要删除列表中大于指定值的所有元素,可以使用排序和切片

我建议使用set而不进行排序、删除或诸如此类的操作…:p

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

for k in my_list[::-1]:

    if k > 6:
        del k
然后分类

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
或者,另一种方法是使用
集合
。使用指定限制的
范围
创建另一个列表,例如,您希望删除
4到8的所有元素,然后

a = a[0:idx] # a = [0, 1, 2, 3, 4, 5]

您还可以通过使用
slice
set
来避免使用
for
循环。
a = a[0:idx] # a = [0, 1, 2, 3, 4, 5]
rm = xrange(4,8+1)

a = list(set(a) - set(rm)) # a = [0, 1, 2, 3, 9]