def purify(ls):
y = ls
for i in ls:
if i % 2 != 0:
y = y.remove(i)
print y
다음 코드는 목록 (4, 5, 5, 4)을 전달할 때 실패합니다. (4, 4) 대신 (4, 5, 4)를 반환합니다. 여기서 뭐가 잘못 됐니? y 목록의 변경이 원래 목록 ls에 영향을 미치는 이유를 이해할 수 없습니다.목록에서 홀수 제거
def purify(ls):
y = ls
for i in ls:
if i % 2 != 0:
y = y.remove(i)
print y
다음 코드는 목록 (4, 5, 5, 4)을 전달할 때 실패합니다. (4, 4) 대신 (4, 5, 4)를 반환합니다. 여기서 뭐가 잘못 됐니? y 목록의 변경이 원래 목록 ls에 영향을 미치는 이유를 이해할 수 없습니다.목록에서 홀수 제거
이렇게하면됩니다.
In [1]: a = (4, 5, 5, 4)
In [2]: result = [i for i in a if not i % 2]
In [3]: result
Out[1]: [4, 4]
기능 있음.
def purify(ls):
return [i for i in ls if not i % 2]
자세한 내용을 보려면 내 코드를 확장하십시오.이 기능을 통해 작동 방식을 이해할 수 있습니다.
def purify(input_list):
result = []
for i in input_list:
if not i % 2:
result.append(i)
return result
항목 제거가 시작되면 색인이 변경됩니다. 루프에서 항목을 변경하는 동안 목록을 반복하는 것은 좋지 않습니다.
def purify(ls):
for i in ls[:]:
if i % 2 != 0:
ls.remove(i)
을하거나 지능형리스트를 사용 : 대신 목록 ls[:]
의 조각에 반복
[i for i in ls if i % 2 == 0]
다음 코드는 이해하기가 훨씬 깨끗하고 쉽게을 :
l = [4, 5, 5, 4]
l = filter(lambda x: x % 2 == 0, l)
print(l)
[4, 4]
remove(...)
L.remove(value) -- remove first occurrence of value.
Raises ValueError if the value is not present.
올바른 버전 :
>>> filter(lambda x: x % 2 == 0, [4, 5, 5, 4])
[4, 4]
올바른 버전 :
def purify(ls):
y = ls[:] # copy it instead of refering to it
for i in ls:
if i % 2 != 0:
y.remove(i) # remove will return none
print y
하지만 목록 y를 편집하고이 아니라 원래 목록 LS. y 목록의 함수 제거가 원래 목록 ls에 영향을주는 이유를 이해할 수 없습니다. –
두 변수가 동일한 객체를 가리키고 있습니다. 그래서'x = y = [ 'a']'그리고'x [0] = 4'를하면'y'도 업데이트됩니다. –