문제

dict 방법 dict.키(),dict.항목() 고 dict.값()return"보기" 신의 목록입니다. http://docs.python.org/dev/3.0/whatsnew//3.0.html

첫째는 방법은 보기에서 다른 반복기?둘째,어떤 혜택이 이 변화는?그것은 성능을 위해 이유?

그것은 보이지 않는요,즉,내가 요구에 대한 목록의 것(나에게 모든 키로)그리고 나는 다른 뭔가가 뒤입니다.이 혼동하는 사람들은?

도움이 되었습니까?

해결책

당신이 효과적으로 얻은 목록이다.그것은 단지의 사본을 내부의 목록은,하지만 무언가를으로 작동하는 경우 그것은 목록이지만 나타내는 내부 상태에 있습니다.

는 동일한 방법은 구현되는 자바(아마 많은 다른 언어로/환경).

이는 많은 사용하는 경우에 반환하는 완전히 분리 목록은 불필요한 낭비입니다.그것은 필요한 것 복사를 전체 내용(할 수있는 많은 많이하지 않).

는 경우에 당신은 단순히 반복하는 키를 통해 다음을 새로 만드는 목록이 필요하지 않습니다.는 경우 실제로 그것을 필요로 별도의 목록(복사본으로)당신은 쉽게 만들 수 있는 목록에서 보기입니다.

다른 팁

Joachim Sauer 의 응답을 설명 아주 잘 이유 list 은 반환되지 않습니다.하지만 이것은 질문이 왜 이러한 기능은 없을 반환 반복자처럼, iteritems etc.았다에서는 Python2.

반복기 훨씬 더 제한적인 보다는 컨테이너입니다.예를 들어,반복기를 허용하지 않는 이상 중 하나 전달;당신이 시도하는 경우 두번째,당신은 그것을 찾을 수 있 비어있었습니다.따라서,같은 작업 elem in cont 지원되는 컨테이너에 의해할 수는 없습니다만 의해 지원되는 반복기:일단 당신이 여부를 확인 요소입니다"에서"반복기,반복기를 가져옵니다.

다른 한편으로,점점 컨테이너 일반적으로 이 필요합 복사본을 만들과 같은 목록을 만드는 사전에의 키를 사용합니다.

view 체는 두 세계의 최고:동작으로 컨테이너,그리고 아직까지의 복사본을 만들어 사전!그것은 사실,종류의 가상 읽기 전용 컨테이너 작동하는 연결하여 기본 사전입니다.내가 알지 못하는 경우 그것은 어디에서도 볼 표준 Python.

편집:

@AntonyHatchkins:그 이유는 반환하지 않는 발전기능지 않는 것을 허용한 빠르 in 작업입니다.네 in 일 발전기를 위해 기능을(당신이 그들을 호출 할 때).즉,당신은 당신이 작업을 수행 할 수 있습니다:

def f():
  for i in range(10):
    yield i

5 in f() # True

그러나의 정의에 따르면 in, 는 경우에,오른쪽 발생기,파이썬은 모든 n 품목의 생성-주요기 O(n) 시간 복잡합니다.아무것도 할 수 있기 때문에 그것에 대해 유일한 의미 있는 행동을 임의의 생성기입니다.

다른 한편으로,의 경우 사전기를 구현할 수 있습니다 in 당신이 좋아하는 어떤 방법을 알고 있기 때문에 당신은 더 많은에 대한 데이터를 관리할 수 있습니다.그리고 사실 in 구현 O(1) 을 사용하여 복잡성 해쉬테이블에 추가한다.를 실행하여 확인할 수 있습니다

>>> d = dict(zip(range(50000000), range(50000000)))
>>> 49999999 in d
True
>>> 49999999 in iter(d) # kinda how generator function would work
True
>>>

와 주는 방법 첫 번째 빠르 in 과 비교하여 두 번째 in.

앞서 언급한 바와 같이 관련된 질문 보기 len() 메소드는 반복기 부(아직 목록은 그것이있다).

또 다른 이득의 반환하신의 목록은 적어도에 대한 열쇠 그것은 최적화된 회원에서 시험 O(1)작업을 대신 O(N)목록에 대한(또는 반복기).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top