1

Пытаюсь добавить записи в список через цикл, но почему-то они декодируются.

sentence_end_markers = set( '.!?' )
sentences = ["That is, don't just write Java code in Python syntax"]
current_sentence = ''
f = "Python has enough in common with Java and C++ that adding a notch on your belt for Python as another of the N programming languages you know is pretty easy.  Paradigm differences aren't a huge barrier to trying Python. "

for line in f:   

      s = line.strip().lower()

      if len(s) > 0:
         current_sentence += s + "\n"
      if len(s) == 0 or s[-1] in sentence_end_markers:
         current_sentence = current_sentence.strip()
         if len(current_sentence) > 10:
            sentences.append(str(current_sentence))
            current_sentence = ''

print('sentence', sentences)

В итоге выводится

sentence ["That is, don't just write Java code in Python syntax", 'p\ny\nt\nh\no\nn', 'h\na\nse\nn\no\nu\ng\nh', 'i\nnc\no\nm\nm\no\nn', 'w\ni\nt\nhj\na\nv\na', 'a\nn\ndc\n+\n+t\nh\na\nt', 'a\nd\nd\ni\nn\ng', 'an\no\nt\nc\nho\nn', 'y\no\nu\nrb\ne\nl\nt', 'f\no\nrp\ny\nt\nh\no\nn', 'a\nsa\nn\no\nt\nh\ne\nr', 'o\nft\nh\nenp\nr\no\ng\nr\na\nm\nm\ni\nn\ng', 'l\na\nn\ng\nu\na\ng\ne\ns', 'y\no\nuk\nn\no\nw', 'i\nsp\nr\ne\nt\nt\ny', 'e\na\ns\ny\n.p\na\nr\na\nd\ni\ng\nm', 'd\ni\nf\nf\ne\nr\ne\nn\nc\ne\ns', "a\nr\ne\nn\n'\nt", 'ah\nu\ng\neb\na\nr\nr\ni\ne\nr', 't\not\nr\ny\ni\nn\ng', 'p\ny\nt\nh\no\nn\n.']

1 Answers1

1

Печать списка (sentences в вашем случае), вызывает эквавалент str(sentences), что вызывает repr(item) для каждого элемента в списке (для каждой строки в этом случае). То есть если у нас есть список L, тогда print(L) эквивалентно:

print('[%s]' % ', '.join(map(repr, L)))

Текстовым представлением (repr) непечатаемых символов, таких как перевод строки (U+000A LINE FEED (LF)), являются специальные последовательности символов: '\n' — как вы эту строку в исходном коде бы записали — новая строка (один символ) может быть представлена в коде двумя символами \ и n внутри константы (string literal):

>>> '\n'.isprintable()
False
>>> len('\n')
1

Если вы хотите, чтобы вывести строки как есть, тогда руками список форматируйте, к примеру:

>>> L = ['a\nb']
>>> print(L)
['a\nb']
>>> print(*L)
a
b

Это код через пробел каждую строку выведет. См. Что значит * (звёздочка) и ** двойная звёздочка в Питоне?

jfs
  • 52,361