이 코드는 다음 URL에서 확인할 개념을 사용한다 : 문제에 여기 흥미로운 개념을 적용 Python list comprehension- "pop" result from original list?
는, 다음과 같은 다른 사람들이 가지고있는 몇 가지 대안 지금까지이 질문에 게시되었습니다. 두 가지 모두 목록 작성을 사용하며 첫 번째 옵션과 두 번째 옵션의 목적을 설명하기 위해 주석 처리됩니다. 이 실험이 내 학습 곡선의 일부로 나를 위해 수행되었지만이 스레드에서 다른 사용자를 도울 수 있기를 바란다 :
좋은 점은 입력 목록이 매우 큰 경우에는 작업을 완료하기 위해 메모리 지출을 두 배로 늘릴 수 있습니다. 당신은 다른 하나를 축소시키면서 하나를 만듭니다.
이 코드는 Python 2.7 및 Python 3에서 테스트되었습니다.6 :
[1, 5, 8, 6, 9, 2, 6, 7, 999, 888]
[:
o1 = [1,5,8,-3,6,9,-4,2,-5,6,7,-7, 999, -43, -1, 888]
# modified version of poster's list
o1b = [1,5,8,-3,6,8,-3,2,-4,6,8] # poster's list
o2 = [x for x in (o1.pop() for i in range(len(o1))) \
if (lambda x: True if x < 0 else o1.insert(0, x))(x)]
o2b = [x for x in (o1b.pop() for i in range(len(o1b))) \
if (lambda x: True if x < 0 else o1b.insert(0, x))(x)]
print(o1)
print(o2)
print("")
print(o1b)
print(o2b)
그것은 (iPython Jupyter 노트에) 이런 결과 집합을 생성 -1, -43, -7, -5, -4, -3]
[1,5,8,6,8,2,6,8]
[-4, -3, -3 ]
여기에는 목록 내장을 작업 말로 사용하지만 읽을 수있는 방식으로 코드를 기능화하는 또 다른 버전이 있습니다. 생각) 다른 숫자 목록으로 테스트하기 쉽습니다.
p1 = [1,5,8,-3,6,9,-4,2,-5,6,7,-7, 999, -43, -1, 888]
# modified version of poster's list
p1b = [1,5,8,-3,6,8,-3,2,-4,6,8] # poster's list
def lst_mut_byNeg_mod(x, pLst): # list mutation by neg nums module
# this function only make sense in context of usage in
# split_pos_negs_in_list()
if x < 0: return True
else:
pLst.insert(0,x)
return False
def split_pos_negs_in_list(pLst):
pLngth = len(pLst) # reduces nesting of ((()))
return [x for x in (pLst.pop() for i in range(pLngth)) \
if lst_mut_byNeg_mod(x, pLst)]
p2 = split_pos_negs_in_list(p1)
print(p1)
print(p2)
print("")
p2b = split_pos_negs_in_list(p1b)
print(p1b)
print(p2b)
마지막 생각 :이 짧은 때문에 일부는 아마 원래의 코드를 선호하는 것 이전에 제공 링크는 코멘트 스레드에서 아이디어의 숫자했다 :
- 그것은에 대한 Google 검색을 권장를 " 파이썬 블룸 필터 라이브러리 "- 이것은 성능 관점에서 유망한 것으로 들리지만 아직 조사하지 못했습니다.
- 554 개의 투표가있는 스레드에 게시물이 있지만 아직 무엇이 잘못되었을 지 설명하는 의견이 4 개 이상 있습니다 그것으로. 옵션을 탐색 할 때 가장 많은 득표를 얻는 내용을 검토하는 것이 아니라 주석 흔적을 검사하는 것이 좋습니다. 이와 같은 상황에 대해 제안 된 많은 옵션이 있습니다.
모르겠다 나는 두 번째'if a :'문을 완전히 이해한다. – letsc
@letsc - 음수를 만났을 때'a'라는 하위 목록이'result'에 추가되므로 두 번째'a : '입력 목록의 끝에있는 양수는'a'에 추가되지만'a'는'result'에 추가되지 않습니다. – TigerhawkT3
우! 환상적. 고마워요! 이미 1 번 게시되었고 이미 가지고있는 코드와 가장 가까운이 답변을 수락합니다. 다른 2 개의 답변도 작동합니다. – letsc