2012-04-25 2 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'), или должна ли каждая строка выглядеть как запись для записи в списке (например,' (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) не выполняет неявное преобразование строк объектов, поэтому этот код не является будущим доказательством (хотя это подразумевает утверждение печати). Сам Гвидо дал рациональное объяснение [почему нет неявного преобразования строк] (http://mail.python.org/pipermail/python-ideas/2010-October/008358.html) - для обнаружения багги-кода. – Darthfett

0

Вместо использования pprint.pprint, который будет печатать Repr объекта, вы должны использовать обычный шрифт, который не изменит пустые строки в буквальном '\n':

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

Если бы карту str над per, а string.join ожидает список строк.

Edit: Пример выходных данных показывает, каждая перестановка не разделенных запятыми, и вы не видите кронштейн для списка:

>>> 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 что-то вроде:

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

Вот более компактная версия вашего фрагмента кода:

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

Я пробовал: для i в per: печать i Я все еще получаю скобки и запятые. Я хочу выход без него. – xrefor

0

Я хотел бы преобразовать список в строку затем удалить скобки и запятые:

x = str(per)[1 : -1] 
x.replace(",", "") 
print x 
Смежные вопросы