Как добавить запятую к последнему строковому элементу в списке в Python? - PullRequest
0 голосов
/ 10 ноября 2019

Я делаю генератор стихов на python, и в настоящее время я работаю над тем, как стихи выводятся пользователю. Я хотел бы сделать так, чтобы каждая строка, которая выводится, будет иметь запятую после. Я думал, что мог бы легко добиться этого, используя функцию .join, но кажется, что он прикрепляется к буквам, а не к концу строки, хранящейся в списке.

line1[-1]=', '.join(line1[-1])
print(*line1)
print(*line2)

Будет выводить что-то вроде:

Moonlight is w, i, n, t, e, r
The waters scent fallen snow

Оглядываясь назад, я должен был знать, что join был неправильной функцией, но я все еще потерялся. Я попытался .append, но, поскольку элементы в моем списке являются строками, я получаю сообщение об ошибке «У объекта str нет атрибута append».

Я понимаю, что другое исправление может быть чем-то вроде:

print(*line1, ",")

Но я работаю над функцией, которая решает, должна ли правильная пунктуация быть "!", ",", "?" Или "-", так что я действительнов надежде найти что-то, что может быть присоединено к строке в самом списке, а не прикреплено во время процесса печати вывода.

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Просто используйте оператор + или += для строк, например:

trailing_punct = ',' # can be '!', '?', etc.

line1 += trailing_punct
# or
line1 = line1 + trailing_punct

+= можно использовать для изменения строки «на месте» (обратите внимание, что под обложками,он создает новый объект и присваивает ему, поэтому id(line1) изменится после этой операции).

0 голосов
/ 10 ноября 2019

Кажется, ваши line1 и line2 являются списками строк, поэтому я начну с предположения, что:

line1 = ["Moonlight", "is", "winter"]
line2 = ["The", "waters", "scent", "fallen", "snow"]

Вы используете поведение по умолчанию для функции print, если данонесколько строковых аргументов для добавления пробела между словами: print(*line1) эквивалентно вызову print(line1[0], line1[1], ...) (см. * args и ** kwargs ).

Это делает добавление разделителя строк ксписок слов строки недостаточен, так как перед ним будет пробел:

print("\n--//--\nUsing print default space between given arguments:")
line_separator = ","
line1.append(line_separator)
print(*line1)
print(*line2)

Результат:

--//--
Using print default space between given arguments:
Moonlight is winter ,
The waters scent fallen snow

То, что вы хотите сделать, можно сделать, присоединившись к списку. слов в одну строку, а затем объединить список строк с нужным разделителем:

print("\n--//--\nPrinting a single string:")
line1_str = ' '.join(line1)
line2_str = ' '.join(line2)
line_separator = ",\n"  # notice the new line \n
lines = line_separator.join([line1_str, line2_str])
print(lines)

В результате

--//--
Printing a single string:
Moonlight is winter,
The waters scent fallen snow

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

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