Печать списка объектов класса, нужно стереть пробел в конце последнего объекта?

#python-3.x

#python-3.x

Вопрос:

Попытка распечатать список объектов класса следующим образом:

 for order in location_orders:
    if (len(location_orders) >= 2):
        print("{0}n".format(order)) 
    else:
        print(order)
print("-" * 24)     
  

Таким образом, в основном он печатает объекты класса нормально, но мне пришлось добавить » n», чтобы разделить их, когда в списке их больше одного. Проблема в том, что это выведет » n» после самого последнего объекта, где мне нужно, чтобы он был на одном уровне, чтобы я мог напечатать там что-то еще. Есть ли способ стереть предыдущую пустую строку, только если она существует с

 print("-" * 24)  
  

оператор печати?
Или, альтернативно, есть ли способ, которым я могу просто разделить заказы новой строкой?
Я не могу индексировать их, потому что они являются объектами класса, поэтому я не могу использовать функцию sep=» » .

Ответ №1:

Это напечатает их с разделителем пробелов:

 print " ".join( location_orders )
  

Если вы требуете, чтобы каждый из них был отформатирован, то

 print " ".join(["{0}".format(order) for order in location_orders])
  

Комментарии:

1. Извините, я хотел сказать, что хочу, чтобы они разделялись строкой, а не пробелом. Но я думаю, я бы просто использовал » n».join, и это сработало бы

Ответ №2:

Нет общего способа отменить напечатанную строку. Как только строка отправляется на терминал, вы можете создать резервную копию, чтобы переписать ее, используя (очень сложные) библиотеки, зависящие от платформы, такие как curses .

Но вам это действительно не нужно. Поскольку ваш список можно повторять, вы можете распаковать все это в один print вызов, используя *args синтаксис. Затем вы можете использовать sep аргумент, чтобы поместить двойные новые строки между ними:

 print(*location_orders, sep='nn')
  

Экземпляры класса будут отформатированы str так же, как и при форматировании их по одному (если вы не написали необычный __format__ метод для класса).

Другим разумным способом сделать это (который, в отличие от распаковки аргументов, также будет работать с print операторами Python 2) было бы использовать str.join для объединения отдельных строк (которые вы создаете из каждого экземпляра в выражении генератора) в одну строку, которую вы печатаете в конце:

 print('nn'.join(str(order) for order in location_orders))
  

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