2013-11-04 3 views
-4

목록 (예 : xs = [1,2,3,4,5,6])에서 짝수를 삭제 한 다음 나머지 목록을 반환하는 함수를 작성하고 싶습니다. 도움이 필요하다. 고맙습니다. 참고 : 삭제 정렬 등과 ​​같은 내장 함수는 사용할 수 없지만 삭제 명령문 만 사용하십시오.파이썬 목록에서 값을 삭제하는 중 3

+0

그리고를? 지금까지 뭐 해봤 어? 어디서 붙어 있니? –

+4

음,'delete' 문이 없기 때문에, 당신은 과제를 실패 할 것입니다. – abarnert

답변

2

당신이 남아있는 목록을 반환 할 필요가 있기 때문에, 삭제해서는 안 대신 필터링 :

>>> xs = [1, 2, 3, 4, 5, 6] 
>>> [v for v in xs if v % 2 == 1] 
[1, 3, 5] 
1

확실한 방법은 '아무튼이 모든 홀수 번호 목록을 만듭니다

[v for v in xs if v % 2 == 1] 

t 직장 :

for index, value in enumerate(xs): 
    if not value % 2: 
     del xs[index] 

또는 더 나쁜 경우,이 특별한 경우에는 작동하지만, 운이 좋은 (그리고 당신의 선생님은 심지어 당신을이 함정에 빠지게 할 것입니다).

왜? 글쎄, 너 del i[0] 일 때, 그 모든 것들이 내려간다. 따라서 다음에 i[1]을 확인하면 원래 i[1]이 아니지만 원본은 i[2]입니다. 원래 i[1]을 확인하지 않고 삭제할 수 없습니다.

for에 대한 설명서에 큰 회색 노트에 설명되어 있습니다. 마티 피에 터스가 말한대로 *이에


가장 좋은 방법은, 처음에 삭제하지 않는 것입니다.

원본 목록을 돌연변이시키는 데 신경 쓰지 않는다면 (동일한 목록에 대한 참조가없는 다른 개체가 있으면 트릭 질문을 좋아하지 않아도 상관 없습니다.) 만들고 작성한 다음 반환하십시오. 그의 대답과 마찬가지로 새로운 목록. 을 수행하더라도은 원래 목록을 변경해야하므로 xs[:] = [v for v in xs if v % 2 == 1]은 바로 삭제할 수 있습니다.

for index, value in list(enumerate(xs))[::-1]: 
    if not value % 2: 
     del xs[index] 

: 당신이 어떤 이유로 자리에서 삭제해야합니다 (그 힘이 과제의 요구 사항이 될처럼 소리) 경우

는하지만, 가장 쉬운 방법은 끝에서 뒤로 작업하는 것입니다 목록에서 값을 삭제하는 것은 그 다음에 오는 값을 이동하기 때문에 역순으로 목록을 살펴보면 결코 길을 잃지 않고 테스트하려는 요소를 건너 뛰지 않습니다.


* 설명은 Python 1.x에서 무언가를 읽습니다. 이제 반복자 프로토콜 공공 것을, 그들은 정말 당신은 또한 지능형리스트를 사용하여 수행 할 수

0
xs=[1,2,3,4,5,6] 

not_even = [] 
for i in xs: 
    if i%2 != 0: 
     not_even.append(i) 

print not_even 
#output: [1, 3, 5] 

... 일부 지정되지 않은 장소에서 내부 카운터를 유지에 대해 이야기 할 필요가 없습니다 :

[i for i in xs if i%2 != 0] 
+0

이것은 설명이없는 Martijn Pieters의 대답의 훨씬 더 긴 버전입니다. – abarnert

관련 문제