Печать списка Python (форматирование)

Имея список:

x=['s',2,'3',4,5,6]

Я могу напечатать это так:

for i in x:
        print i

Однако, как я выяснил, немного быстрее использовать только один оператор print, например так (ниже показано, как я дошел до этого момента):

print "\n".join( i.__class__==string and i or str(i) for i in x )

Учитывая, что я хочу использовать второй вариант и что я хотел бы, чтобы выходные данные были примерно такими (я также хотел бы включить счетчик):v1: s v2: 2 v3: 3 etc

Вот что я попробовал:

1)

count=0
print (("v"+str(++count)).join(":%s "% i for i in x  ) )

результат::s, v0:2, v0:3, v0:4, v0:5, v0:6, На самом деле не то, к чему я стремлюсь.

а) str(++count) ничего не печатает, count++ выдает ошибку синтаксиса

б) первый v нигде не найти, так как join в этом случае добавляются разделители и нет необходимости в первом элементе

2)

print ( ["v"+str(++count)+ ":%s, "% i for i in x ] )

дает ['v0:s, ', 'v0:2, ', 'v0:3, ', 'v0:4, ', 'v0:5, ', 'v0:6, '] Лучше, но все же нет counter и я не хочу [] показывается

3) Очистите все и перезапустите:

print ",".join(i  for i in x ) 

не может соединить string а также int так становится:

print ",".join(i.__class__==string and i or str(i)  for i in x )

который дает:

s,2,3,4,5,6

И вот где я застрял.

2 ответа

Решение

Я бы предложил использовать enumerate:

x = ['s',2,'3',4,5,6]
print ', '.join('v{}: {}'.format(v, i) for v, i in enumerate(x))
# v0: s, v1: 2, v2: 3, v3: 4, v4: 5, v5: 6

Хотя я согласен с ответом @ARodas, я хотел бы также отметить, что:

  1. Вы должны убедиться, что печать действительно является узким местом в вашей программе, прежде чем начинать ее оптимизацию (это очень редко происходит).

  2. expr1 and expr2 or expr3 использовался до Python 2.5, когда expr2 if expr1 else expr3 троичный оператор был введен. Если вы не нацелены на Py <= 2,4, if else предпочтительнее

  3. Вместо i.__class__==string лучше написать isinstance(i, string) (что такое string, тем не мение? Ты имел ввиду str?).

  4. Более того, вам не нужно проверять, что: str() строки просто возвращает эту строку.

  5. Здесь нет ++ оператор в Python. ++count == +(+count) == count,

Другие вопросы по тегам