|
|
1
17
随机模块定义choice(),它执行您想要的操作:
还要注意,这假设每个单词都在文件中的一行上。如果文件很大,或者经常执行此操作,您可能会发现不断重读文件会对应用程序的性能产生负面影响。 |
|
|
2
9
另一个解决方案是 getline
从文档中:
编辑: 您可以计算一次总数并存储它,因为字典文件不太可能更改。 |
|
|
3
9
它在人类时间上是有效的。
顺便说一句,您的实现与stdlib的实现一致
测量时间性能
我想知道所提出的解决方案的相对性能是什么。
(每个函数被调用10次(缓存性能))。
这些结果表明,简单的解决方案(
用于比较的代码( as a gist ):
|
|
|
4
3
我的答案来自 Whatâs the best way to return a random line in a text file using C? 以下内容:
编辑:使用的原始答案版本
广义版本
实例
产量('yeps\n', 98569)
('a', 2)
(6, 4)
(None, 0)
(0, 1)
('window._gjp && _gjp(', 10)
|
|
|
5
2
|
|
|
6
1
你可以不用
我也用过
|
|
|
7
1
我没有你的代码,但就算法而言:
|
|
|
8
0
在这种情况下,效率和冗长是不一样的。这是一种非常诱人的方法,它可以用一行或两行的方式完成所有工作,但是对于文件I/O,要坚持经典的fopen风格,低级别的交互,即使它需要更多的代码行。 我可以复制和粘贴一些代码,并声称它是我自己的(其他人可以,如果他们愿意的话),但看看这个: http://mail.python.org/pipermail/tutor/2007-July/055635.html |
|
|
9
0
有几种不同的方法来优化这个问题。您可以优化速度或空间。 如果您想要一个快速但需要内存的解决方案,请使用file.readlines()读取整个文件,然后使用random.choice()。 如果您想要一个内存高效的解决方案,首先通过反复调用somefile.readline()来检查文件中的行数,直到它返回“”,然后生成一个小于行数(例如,n)的随机数,返回到文件的开头,最后调用somefile.readline()n次。下次调用somefile.readline()将返回所需的随机行。这种方法不浪费内存来保存“不必要的”行。当然,如果您计划从文件中获取大量随机行,这将是非常低效的,而且最好将整个文件保存在内存中,就像第一种方法一样。 |