2012-10-04 2 views
2

n 개의 항목이 새 목록에 추가되면 목록 이해를 중지 할 수 있습니까?python list comprehension set max len

예를 들어,

[x for x in xrange(20) if len(<this>) < 10 ] 

가 확인하려면 : 나는 10에 결과 목록의 길이를 제한하고 싶어 ""현재 목록이 만들어지고에 대한 의사입니다. 메신저를 사용하여 파이썬 2.7

+0

''이란 무엇입니까? –

+0

위의 경우 현재 작성중인 목록을 참조하기위한 의사 코드로 보입니다 –

+0

나는 아직도 문제를 이해하지 못합니다. –

답변

9

번호 그러나 그러나 itertools.islice() 주어진 수의 항목을 생성하는 생성기를 제공 할 수 있습니다.

>>> list(itertools.islice('foobar', 3)) 
['f', 'o', 'o'] 
+3

가장 일반적인 방법입니다. 시퀀스를 소스로 사용하는 경우 일반 목록 슬라이스 만 수행하면됩니다. –

1

xrange 발전기 인 경우 귀하의 사용은 단지

list(xrange(20))[:10] 
2

이 수행 할 수 있습니다 할 수 있지만,이리스트의 구현에 의존하기 때문에 그것은 당신이 사용하는 파이썬의 구현에 따라 달라집니다 이해력.

[i for i in xrange(20) if len(locals().get("_[1]")) < 10] 

을 당신이해야하는 것이 매우 어렵다 예를 들어 당신이 (정말 작동 그것을 자신을 시도) 다음을 수행 할 수 있도록 CPython의에서 "이 목록의 이해"의 이름은 "_[1]"입니다 실제 생산 코드로이를 수행합니다. 그것은 터무니없이 모호합니다. 누군가 다른 구현을 사용하고 있다면, 깨질 수 있습니다. 파이썬은 지능형리스트 건설 중에 어떤 장소에서 현재 목록을 저장해야하기 때문에

l = [] 
for i in xrange(20): 
    l.append(i) 
    if len(l) >= 10: 
     break 

locals().get("_[1]") 작품 대신, 단지 루프를 사용합니다. "_[1]"은 누구도 변수 이름으로 사용하지 않을 가능성이 높기 때문에 다소 임의적으로 선택되었습니다. 중첩 된 목록 이해를 빌드하는 경우, 그들은 "_[2]"및 ""등과 같이 더 높은 증가 된 변수 이름으로 목록을 저장합니다.

+1

'_ [1]'은 (는) 통역사에서만 작동합니다. –