2015-09-06 2 views
-2

У меня есть список атрибутов attrlist [], которые я добавлял строки для всего кода. Как распечатать этот список без скобок, цитат и запятых и с правильным интервалом? Вот что я имею в виду:Печать списка без квадратных скобок, без кавычек, без запятых и дополнительного интервала

Текущий код:

print('[%s]' % ', '.join(map(str, attrlist))) 

Мой выход:

[1, bomb, C4, red, evil, yup] 

Я хотел бы программы для вывода:

1 bomb   C4  red  evil yup ... 

Начало '1' до космоса до «бомбы» есть 4 пробела Начало «бомбы» до последнего места до «C» 4 '- 16 пробелов. Начало «C4» до последнего пробела перед «красным» - 10 пробелов. Начало «красного» в пространстве перед «злом» - 11 пробелов.

Массив будет меняться, поэтому «1» может быть «222», но все еще занимает в общей сложности 4 пробела. То же самое с бомбой, C4, красный (ака имя, местоположение, цвет). После этого, однако, ключевые слова не должны быть разнесены, просто перечислены с промежутком между ними.

Большое вам спасибо за помощь. Это очень ценно. Кстати, я делаю это для системы организации инструмента, установленной на малине pi, запускающей python 2.7.10.

+0

Есть еще вопрос, почему вы должны это делать. Формат, который вы хотите для вывода, не имеет смысла. Но особые пожелания могут выполняться только специальными методами, простой способ - это всегда только по умолчанию. @Ben имеет хороший ответ, который показывает, как сделать вашу печать длинным путем. –

ответ

3

Ну скобки и запятые достаточно легко избавиться просто избавьтесь от них в вашем коде.

print(' '.join(map(str, attrlist))) 

Но так как вы хотите пользовательский интервал, вы должны смотреть на str.format. Он использует специальный format string syntax.

attrs = [1, 'bomb', 'C4', 'red', 'evil', 'yup'] 
print('{0:<4}{1:<16}{2:<10}{3:<11}{rest}'.format(*attrs[:4], rest=' '.join(attrs[4:]))) 
# Note in earlier versions of py2 you have to refer to format arguments by index or key, {} won't work 
+0

Я понимаю, что OP имеет неизвестное количество ключевых слов в конце списка, поэтому небольшая модификация: 'print (" {0: <4d} {1: <16s} {2: <10s} {3: <11s } {rest} ". format (* attrlist [: 4], rest = '' .join (attrlist [4:])))' – AChampion

+0

@achampion, это, вероятно, не плохое предположение, и оно не нарушает текущего поведения , С другой стороны, любые причины, по которым нужно явно указывать тип, когда это поведение по умолчанию? Особенно для строк, 's' - единственный вариант. – KevinOrr

+1

Zen of Python: «Явный лучше, чем неявный». :) У меня нет веской причины. – AChampion

1

Это не будет каким-либо образом быть эффективным, но вот решение:

attrlist = [1, 'bomb', 'C4', 'red', 'evil', 'yup', 'puppy'] #this list needed a puppy 
lengthlist = [4, 16, 10, 11] 

ans = '' 
for attr, length in zip(attrlist, lengthlist): 
    ans += format(attr, '<{}'.format(length)) 

ans += ' '.join(map(str, attrlist[len(lengthlist):])) 

print(ans) 

Вы можете увидеть строку правила форматирования в docs

+1

Ваш комментарий о 'zip' не имеет никакого смысла. 'zip (x, y)' всегда останавливается, когда заканчиваются либо 'x', либо' y'. – Blckknght

+0

@Blckknght: Я не понимал. Позвольте мне отредактировать мой ответ. Спасибо – Ben

+0

Просто немного tidbit, метод str.format достаточно умен, чтобы распознать что-то вроде '' {attr: <{length}} '. Format (attr =' hi ', length = 5) ' – KevinOrr

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