2013-02-06 2 views
-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을 어떻게 삭제합니까?for-loop의 목록에서 삭제하십시오. Python

+0

또한'slice' 또는'set'를 사용하여'for' 루프를 사용하여 피할 수 4 to 8에서 모든 요소를 ​​제거 할 사용하여 다른 목록을 만들 수 있습니다. – Thiru

답변

0

목록 이해를 사용할 수 있습니다.

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

또는 filter

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

위의 두 가지 옵션이 같은 일을 할 것입니다 (주 파이썬 3에서 당신은 목록에 변환 할 수있는 filter 개체를 반환합니다).

3
당신은 단지 새로운 하나를 만들고 변수에 를 할당하면 이상 반복되는 목록을 변경해서는 안

:

my_list = [k for k in my_list if k <= 6] 
0

이 시도,

>>> my_list= [i for i in my_list if i <= 6] 
>>> print my_list 
[0, 1, 2, 3, 4, 5, 6] 
>>> 
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] 
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 
0

당신이 지정된 값보다 큰 목록의 모든 요소를 ​​삭제합니다. 정렬 및 분할을 사용할 수 있습니다.

I 정렬하지 않고 세트를 사용하거나 제거하거나 저쩌구 ... 제안 : 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 당신이 다음

rm = xrange(4,8+1) 

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