2013-02-22 2 views
6

내가 있다고 가정 값 임의 반복 가능한반복 가능 객체를 인쇄 할 수있는 하나의 함수가된다

var = "ABCDEF"

나는이

it = itertools.combinations(var,2)

같은 반복 가능한 모든 인쇄 할 수있는 하나의 함수가 도착

printall(it)

같이 반복 가능 객체의 값 6,

오히려이 오히려 당신이 모든 값을 인쇄 할 경우, 원하는 것을 따라 루프

+3

왜 for 루프가 문제입니까? –

+0

나는 그렇게 믿지 않는다. 그러나 나는 틀릴지도 모른다 ... – xxmbabanexx

+1

잠깐 ... 당신은 사용자 정의 함수로 모듈을 만들고 distilus를 사용하여 설치할 수있다. – xxmbabanexx

답변

14

의를 사용하는 것보다, 당신이 그들을 계산해야 - 값을 보장하지 않는 반복자는 그들이 때까지 계산된다 모든 요청, 그래서 이것을 달성하는 가장 쉬운 방법은 make a list하는 것입니다

print(list(iterable)) 

이 적합 할 수있다 일반적인 목록 형식으로 항목을 인쇄합니다. 새 행에 각 항목을 원하는 경우, 최선의 선택은 당신이 언급 한 바와 같이 루프에 대한 간단한이다 :

for item in iterable: 
    print(item) 

당신이 특정 형식의 데이터를 필요로하지 않는 경우, 그러나 다만 할 필요 읽기 (모든 예를 들어 한 줄에), 당신은 the pprint module을 체크 아웃 할 수 있습니다. 정말 생각하지 않습니다

마지막 옵션은 최적이지만, 완성도에 대한 언급, the print() function 매우 유연이고, 3.X에서 가능하다 :

print(*iterable, sep="\n") 
다음

에 인수로 우리 unpack the iterableprint() 그런 다음 분리자를 일반 줄 바꿈과 반대되는 줄 바꿈으로 만드십시오.

+1

또한 iterator가 반복되면 소비됩니다. –

+1

@JoelCornett 실제로. 목록을 작성했다면 대신 목록을 반복 할 수 있습니다. 인쇄용 * –

+0

(* iterable)은 승자입니다. –

4

str.join 메서드를 사용하고 새 행의 반복 가능 요소의 각 요소를 조인 할 수 있습니다.

print('\n'.join(it)) 
+4

+1하지만 요소가 문자열이라고 가정 할 때 유의할 가치가 있습니다. 그렇지 않은 경우 [발전기 표현식 또는 목록 이해력] (http://www.youtube.com/watch?v=pShL9DCSIUw)이 필요합니다. –

1
각 요소가 당신과 같이하십시오 형식의 할 수 있습니다 형식을 사용할 수 있습니다

:

>>> print '\n'.join('{:>10}'.format(e) for e in iter([1,2,'1','2',{1:'1'}])) 
     1 
     2 
     1 
     2 
    {1: '1'} 

각 요소는 반드시 문자열 할 필요는 없지만이 경우 __repr__ 방법이 있어야합니다 끈이 아니야.

그런 다음 쉽게 원하는 기능을 쓸 수 있습니다 :

>>> def printall(it,w): print '\n'.join('{:>{w}}'.format(e,w=w) for e in it) 
>>> printall([1,2,'3','4',{5:'6'}],10) 
     1 
     2 
     3 
     4 
    {5: '6'} 

내가 목록을 사용하고,하지만 어떤 반복자 할 것입니다.

0

당신은 VAR 데이터에 대한 반복자를 만들 itertools에서 chain() 기능을 사용 후 바로 사용하여 압축을 풀 수 있습니다 * 반복자의 운영자

>>> from itertools import chain 
>>> var = 'ABCDEF' 
>>> print(*chain(var)) 
A B C D E F 
>>> print(*chain(var), sep='\n') 
A 
B 
C 
D 
E 
F 

그냥 기존 데이터를 반복하고 사용할 수있는 다시 인쇄해야하는 경우 별 연산자 *는이 경우

>>> print(*var) 
A B C D E F 
>>> print(*var, sep='\n') 
A 
B 
C 
D 
E 
F 
관련 문제