Можно ли вставить все, кроме последнего разделителя, при печати из цикла Python 3 for? - PullRequest
0 голосов
/ 13 июня 2018

Пожалуйста, ознакомьтесь с приведенным ниже примером ради ясного вопроса:

Этот синтаксис:

print('a','b','c',sep=' @ ')

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

a @ b @ c

Этовывод, который я хочу выдать, но из цикла for.

Попытки, которые я сделал до сих пор:

for item in ['a','b','c']:
    print(item,sep=' @ ')

, но это приводит к:

a
b
c

и:

for item in ['a','b','c']:
    print(item,end=' @ ')

но это дает:

a @ b @ c @ 

Есть ли способ получить вывод:

a @ b @ c

специально для этого цикла for?

* Дополнительные пояснения, поскольку, как представляется, детали важны для ответа *

Полная настройка выглядит следующим образом:

for fruit in df.index.year.unique():
    total = df[df.index.year == year]['Number of Fruits'].sum()
    print(fruit + ' Total: ' + str(total))

иЯ специально хочу напечатать каждый фрукт и сумму на одной строке, разделенной '|', но без' |'разделитель появляется в конце.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Вы можете попробовать этот вариант, если хотите получить результат с циклом for: -

t = ['a','b','c']
for i in t[:-1]:
    print(i, end=' @ ')
print(t[-1])

Также sep не сработал, поскольку он разделяет два или более элементов;и не может сделать это на одном элементе.

0 голосов
/ 13 июня 2018

Если причина, по которой вы хотите использовать цикл, заключается в том, что вы хотите напечатать произвольное количество элементов с разделителями, тогда вы можете использовать print с распаковкой.

lst = ['a', 'b', 'c']
print(*lst, sep=' @ ') # 'a @ b @ c'

Поскольку один вызов IOэто быстрее, чем использование print в цикле for, нет реальной причины не использовать его.

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

lst = []

for fruit in df.index.year.unique():
    total = df[df.index.year == year]['Number of Fruits'].sum()
    lst.append('{} Total: {}'.format(fruit, total))

print(*lst, sep=' @ ')
0 голосов
/ 13 июня 2018

Вы можете позволить циклу печатать еще один @ в конце, после этого просто удалите его с экрана следующим образом:

for i in ['a','b','c']:
  print(i, end=' @ ')
print('\b\b ')

\b используется для перемещения курсора на одно место раньше, а затемв команде print есть пробел, поэтому последний @ будет перезаписан пробелом и больше не будет виден

Вы можете увидеть этот код в действии здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...