2012-04-25 11 views
-1

나는 괄호 쉼표없이 내 코드의 출력을 만들고 싶어 :괄호와 쉼표없이 raw_input에서 순열 인쇄?

import itertools 
import pprint 
run = 1 
while run != 0: 
    number = raw_input('\nPlease type between 4 and 8 digits and/or letters to run permutation: ') 

    if len(number) >= 4 and len(number) <= 8: 
     per = list(itertools.permutations(number)) 
     pprint.pprint(per) 
     print '\nNumber of possible combinations: ',len(per),'\n' 

    elif number == 'exit': 
     run = 0 

    else: 
     raw_input('length must be 4 to 8 digits and/or letters. Press enter to exit') 
     run = 0 

는 그래서 새로운 라인의 각 조합 목록을 출력합니다. 괄호와 쉼표를 사용하지 않고 어떻게 인쇄합니까? 나는 여전히 특정 조합을 얻기 위해 per [x]를 호출 할 수 있기를 원한다. 어떤 도움을 주셔서 감사합니다! 고맙습니다.

+0

"대괄호 및 쉼표없이" 보고 싶은 형식의 예를 들려 줄 수 있습니까? 각 행에 공백 (예 :'0 1 2 3')으로 구분 된 숫자 또는 각 행이 목록의 항목에 대한 repr (예 :'(0, 1, 2, 3)')으로 나타나야합니까? – Darthfett

답변

0

사용 나는 문자열 목록을 변환 할 join()

per = list(itertools.permutations(number)) 
     for x in per: 
      print "".join(x) 
     print '\nNumber of possible combinations: ',len(per),'\n' 
+0

이것은 내가 원하는 출력이다! 고맙습니다! – xrefor

+0

'join' (적어도 python 3.x에서)은 객체의 암시 적 문자열 변환을하지 않으므로이 코드는 미래의 증거는 아닙니다 (print 문은 이것을 의미 함). Guido는 버그 코드를 감지하기 위해 [암묵적인 문자열 변환이없는 이유] (http://mail.python.org/pipermail/python-ideas/2010-October/008358.html)에 대한 합리적인 이론을 제시했습니다. – Darthfett

0

대신 객체의에 repr을 인쇄 할 pprint.pprint를 사용하여, 당신은 문자 그대로 '\n'에 줄 바꿈을 변경하지 것이다, 일반 인쇄를 사용해야합니다

print('\n'.join(map(str, per))) 

같이, per 이상 str를 매핑했다 string.join에는 문자열 목록이 필요합니다.

편집는 :

for line in per: 
    print ''.join(line) 

:

>>> print('\n'.join(map(str, itertools.permutations([0, 1, 2, 3])))) 
(0, 1, 2, 3) 
(0, 1, 3, 2) 
(0, 2, 1, 3) 
(0, 2, 3, 1) 
(0, 3, 1, 2) 
(0, 3, 2, 1) 
(1, 0, 2, 3) 
(1, 0, 3, 2) 
(1, 2, 0, 3) 
(1, 2, 3, 0) 
(1, 3, 0, 2) 
(1, 3, 2, 0) 
(2, 0, 1, 3) 
(2, 0, 3, 1) 
(2, 1, 0, 3) 
(2, 1, 3, 0) 
(2, 3, 0, 1) 
(2, 3, 1, 0) 
(3, 0, 1, 2) 
(3, 0, 2, 1) 
(3, 1, 0, 2) 
(3, 1, 2, 0) 
(3, 2, 0, 1) 
(3, 2, 1, 0) 
0

같은 뭔가 pprint.pprint 교체 : 예 출력은 각각의 순열은 쉼표로 구분되지 않으며,이 목록에 대한 브래킷이 표시되지 않습니다 보여줍니다 다음은 코드 스 니펫의 좀 더 간결한 버전입니다.

import itertools 

while True: 
    user_input = raw_input('\n4 to 8 digits or letters (type exit to quit): ') 
    if user_input == 'exit': 
     break 
    if 4 <= len(user_input) <= 8: 
     # no need for a list here, just unfold on the go 
     # counting via enumerate 
     for i, p in enumerate(itertools.permutations(user_input)): 
      print(''.join(p)) 
     print('#permutations: %s' % i) 
+0

감사합니다! 이것은 정말 내 코드를 더 간단하게 만들 수있는 쉬운 변화를 보는데 도움이된다. 그레이트 추가! – xrefor

0
그들을 통해

루프 및 인쇄 당신이 좋아하는 캐릭터 (여기 스페이스)로 구분 하나를 출력 코드를 자신의 비트 데이터로

#pprint.pprint(per) 
for p in per: 
    print ' '.join(p) 
0

그냥 교체 pprint(). 이런 식으로 뭔가 :

for i in per: 
    print i 
+0

나는 시도했다 : per for : print i 나는 아직도 괄호와 쉼표를 얻는다. 나는 그것없이 출력을 원한다. – xrefor

0

은 괄호와 쉼표 제거 : 대답의

x = str(per)[1 : -1] 
x.replace(",", "") 
print x 
0

다른 변화를

(lambda x: ''.join(x))(x)