我使用这个生成文本:
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)。我基本上试图用随机输出绘制Zipf定律。
如果我使用它:
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>
我希望用空格分隔的每个字母序列都被视为一个单词,即输出被视为文本。
感谢您的帮助!
答案 0 :(得分:3)
试试这个:
text1 = ' '.join([alphabet[bisect.bisect(f_list, random.random())] for i in xrange(300)])
至于添加更多细节:' '.join(list)
是将列表连接到字符串的pythonic方式。 ' '
- 部分表示它应该与空格连接。例如,如果你用逗号加入它,那么它将是','
。
或者您甚至可以跳过这样的括号:
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