Python 2.7 从许多单词中随机选择一个单词

Python 2.7 从许多单词中随机选择一个单词,python-2.7,random,word,Python 2.7,Random,Word,一个人如何从众多单词中随机抽取一个单词?Words.txt是一个单词文件,包含英语词典中的每个单词,用新行分隔。您可以使用heapq从文件中随机抽取一行,方法是给它一个随机键,例如: import random, heapq with open('Words.txt') as fin: word, = heapq.nlargest(1, fin, key=lambda L: random.random()) 我们在这里使用heapq.nlagest(我们可以使用heapq.nsmal

一个人如何从众多单词中随机抽取一个单词?Words.txt是一个单词文件,包含英语词典中的每个单词,用新行分隔。

您可以使用
heapq
从文件中随机抽取一行,方法是给它一个随机键,例如:

import random, heapq

with open('Words.txt') as fin:
    word, = heapq.nlargest(1, fin, key=lambda L: random.random())
我们在这里使用
heapq.nlagest
(我们可以使用
heapq.nsmalest
——这是非常随意的)的原因是它的内存效率更高——我们一次只需要在内存中保留一行。它要么保持不变,要么在每次迭代输入时被具有更高随机值的行替换。这与:

from random import choice

with open('Words.txt') as fin:
    words = list.readlines()
word = choice(lines)
所以,在这种情况下,我们将所有单词加载到内存中。然后我们从列表中随机选取一个单词。如果你要继续挑选单词,并且在内存中保留所有单词,那么这是一个更好的方法,因为随机挑选内存中的单词将比每次线性扫描文件更有效率

简言之,如果您知道您只需要一个随机字(假设您的程序只在启动时需要它),那么使用第一种方法并避免内存开销。如果您想重复获取更多字,请使用内存命中并使用第二种方法

当然,如果你知道你只需要100个(在这里选择一个数字)随机单词,然后将参数调整到
heapq.nlargest
并从一个iterable中消费,然后如果你用完了,决定下一步做什么

import random, heapq

with open('Words.txt') as fin:
    words = heapq.nlargest(100, fin, key=lambda L: random.random())
    word_iter = iter(words)
然后,在以后的脚本中,使用以下内容:

try:
    word = next(word_iter)
except StopIteration:
    # we've exhausted all our pre-loaded random words... 
    # either get more, fail, whatever...

不确定这是否是一个合适的复制目标的可能复制-它显示了如何在序列上使用
random.choice
,而不是在一个文件或iterable上。“有人如何从多个列表中随机抽取一个单词”,和任何人一样好:如果选民认为这个答案有什么问题,DIf不会介意评论如何改进这个答案,我们将不胜感激。