Как напечатать строку переменных без пробелов в Python (минимальное кодирование!)

У меня есть что-то вроде: print "\n","|",id,"|",var1,"|",var2,"|",var3,"|",var4,"|"

Он печатает с пробелами для каждой переменной.

| 1 | john | h | johnny | mba |

Я хочу что-то вроде этого:

|1|john|h|johnny|mba|

У меня есть 20 переменных, которые я должен напечатать, и я ненавижу использовать sys.stdout.write(var) для каждой из них. Спасибо питонисты!


person ThinkCode    schedule 14.07.2010    source источник


Ответы (4)


Попробуйте использовать join:

print "\n"+'|'.join([id,var1,var2,var3,var4])

или если переменные еще не являются строками:

print "\n"+'|'.join(map(str,[id,var1,var2,var3,var4]))

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

person MAK    schedule 14.07.2010

Для переменного количества значений:

print '|%s|' % '|'.join(str(x) for x in [id, var1, var2, var3, var4])
person Mike Boers    schedule 14.07.2010
comment
напечатать '|%s|' % '|'.join(map(str, [id, var1, var2, var3, var4])) выглядит лучше (если у вас действительно большой массив, вы можете вместо этого использовать imap). - person Tomasz Wysocki; 15.07.2010
comment
@Tomasz: Ты так думаешь? Я думал, что питонисты обычно считают генератор более понятным... - person Mike Boers; 15.07.2010
comment
Вы можете быть правы. Но при таком подходе карта кажется бесполезной. - person Tomasz Wysocki; 15.07.2010

print "\n|%s|%s|%s|%s" % (id,var1,var2,var3,var4)

Взгляните на Форматирование строк.

Изменить: другие ответы с соединением лучше. Присоединение ожидает строки.

person user389875    schedule 14.07.2010
comment
%s работает с любым объектом, а не только со строками -- "%s + %s" % (1, 2) == "1 + 2". Вам не нужно использовать %d, если только вы не хотите, чтобы код вызывал исключение для нечислового ввода. - person John Millikin; 15.07.2010
comment
Конечно, %s не дает очень полезного вывода, если не реализованы __str__ или __repr__. - person Wayne Werner; 15.07.2010

Если вы используете Python 2.6 или новее, используйте новый стандарт для форматирования строки, метод str.format:

print "\n{0}|{1}|{2}|".format(id,var1,var2)

текст ссылки

person Steven Mohr    schedule 14.07.2010
comment
А если у вас Python 2.7 или новее, вы можете даже опустить цифры: "\n{}|{}|{}|".format(id, var1,var2) - person Tim Pietzcker; 15.07.2010