2013-10-06 4 views
2

У меня есть функция, которая возвращает большой набор целочисленных значений в виде кортежа. Например:Более элегантный/Pythonic способ печати элементов кортежа?

def solution(): 
    return 1, 2, 3, 4 #etc. 

Я хочу элегантно распечатать решение без представления кортежа. (т. е. круглые скобки вокруг чисел).

Я пробовал следующие два кода.

print ' '.join(map(str, solution())) # prints 1 2 3 4 
print ', '.join(map(str, solution())) # prints 1, 2, 3, 4 

Они оба работают, но выглядят несколько уродливо, и мне интересно, есть ли лучший способ сделать это. Есть ли способ «распаковать» кортежные аргументы и передать их в оператор print в Python 2.7.5?

Я бы очень хотелось сделать что-то вроде этого:

print(*solution()) # this is not valid syntax in Python but I wish it was 

вроде как кортежа распаковке, так что это эквивалентно:

print sol[0], sol[1], sol[2], sol[3] # etc. 

За исключением без уродливых индексов. Есть ли способ сделать это?

Я знаю, что это глупый вопрос, потому что я просто пытаюсь избавиться от круглых скобок, но мне просто интересно, есть ли что-то, чего я не видел.

+1

Параметр 'print' оператор добавляет пробелы между элементами последовательности по умолчанию, так что первый случай, вероятно, может быть достигается с помощью: 'print [x for x в решении()]'. –

ответ

8

print(*solution()) фактически может быть действует на Python 2.7, просто положить:

from __future__ import print_function 

На верхней части файла.

Вы также можете перебирать кортеж:

for i in solution(): 
    print i, 

Это эквивалентно:

for i in solution(): 
    print(i, end= ' ') 

Если вы когда-либо использовать Python 3 или оператор импорта выше.

2

Вы также можете попробовать:

print str(solution()).strip('()') 

Другая возможность отметил eyquem в комментарии:

print repr(solution())[1:-1] 
+2

Да. Я просто думал предложить '' repr (solution()) [1: -1] '' – eyquem

Смежные вопросы