将输出存储为文本,而不是列表

时间:2011-12-30 09:41:32

标签: python list text random

我使用这个生成文本:

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>

我希望用空格分隔的每个字母序列都被视为一个单词,即输出被视为文本。

感谢您的帮助!

1 个答案:

答案 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