Сохранять вывод как текст, а не как список - PullRequest
1 голос
/ 30 декабря 2011

Я генерирую текст, используя это:

for i in xrange(100):
    sys.stdout.write(alphabet[bisect.bisect(f_list, random.random()) - 1])

я получаю вывод, который выглядит так:

fnhtlr hhub  del tn eleo s d  nerowepeldhoantah yf  tr e saetenwgkoyears 
oenooe urbmhonnrniwc iasseb

и я хотел бы знать, как сохранить вывод как TEXT, а не список, чтобы я мог использовать для него fd.inc (word). Я в основном пытаюсь построить закон Ципфа с моим случайным выводом.

если я использую это:

text1 = [alphabet[bisect.bisect(f_list, random.random())] for i in xrange(300)]

мой вывод хранится в виде списка, и fd не работает с ним, так как он считает каждый символ отдельным словом.

for word in text1:
    fd.inc(word)
print fd
<FreqDist: ' ': 1776, 'e': 1008, 'a': 752, 't': 750, 'n': 604, 'i': 586,
 'o': 556, 'h': 542, 's': 528, 'r': 478, 'l': 388, 'd': 312, 'u': 242, 
'm': 202, 'w': 192, 'g': 172, 'b': 152, 'p': 152, 'f': 150, 'c': 148, 'y': 120,
 'k': 90, 'v': 66, 'q': 12, 'z': 10, 'x': 8, 'j': 4>

Мне бы хотелось, чтобы каждая последовательность букв, разделенных пробелом, рассматривалась как слово, т. Е. Чтобы вывод считался текстом.

Спасибо за вашу помощь!

1 Ответ

3 голосов
/ 30 декабря 2011

Попробуйте это:

text1 = ' '.join([alphabet[bisect.bisect(f_list, random.random())] for i in xrange(300)])

Чтобы добавить больше деталей: ' '.join(list) - это питонский способ присоединения списка к строке.' ' -часть говорит, что она должна быть объединена с пробелом.Например, если вы присоедините к нему запятую, вместо нее будет ','.

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

text1 = ' '.join(alphabet[bisect.bisect(f_list, random.random())] for i in xrange(300))

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

text1 = ''.join([alphabet[bisect.bisect(f_list, random.random())] for i in xrange(300)])

Еще одна мысль.Что произойдет, если вы измените свой последний образец фрагмента в своем вопросе на:

for word in text1.split():
    fd.inc(word)
print fd

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

Последнее слово

Поскольку проблема была решена, я просто хочу объяснить, что означают эти вещи:

''.join(list) - Это означает, что нужно взять исходный список, который разделенкаждый символ и сделать из него строку.

string.split() - Это означает, что нужно снова составить его список (который fd.inc независимо от того, что ему нужно), но разделить его словом, а нехарактерный для оригинального списка.

Кроме того, я бы порекомендовал вам ознакомиться с некоторыми основами Python, которые помогут вам в будущем :) Это отличная серия видео: http://www.youtube.com/watch?v=tKTZoB2Vjuk

...