#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
).