Python 我应该在哪里申报5000多个单词的列表?

Python 我应该在哪里申报5000多个单词的列表?,python,Python,我正在用python编写一个游戏,其中我必须定期从单词列表中随机抽取一个单词。当我制作游戏原型时,我在其中一个模块的顶部声明了一个包含十个单词的单词_list=['cat','dog','rat','house']。然后,我使用choiceword_列表获取一个随机单词。然而,我必须把这个临时的破解改成更优雅的东西,因为我需要将单词列表的大小增加到5000多个单词。如果我在当前模块中这样做,看起来会很可笑 我是否应该将所有这些单词放在一个平面txt文件中,然后在需要单词时从该文件中读取?如果是,

我正在用python编写一个游戏,其中我必须定期从单词列表中随机抽取一个单词。当我制作游戏原型时,我在其中一个模块的顶部声明了一个包含十个单词的单词_list=['cat','dog','rat','house']。然后,我使用choiceword_列表获取一个随机单词。然而,我必须把这个临时的破解改成更优雅的东西,因为我需要将单词列表的大小增加到5000多个单词。如果我在当前模块中这样做,看起来会很可笑


我是否应该将所有这些单词放在一个平面txt文件中,然后在需要单词时从该文件中读取?如果是,我最好怎么做?把每个单词分开一行,然后随机读一行?我不确定最有效的方法是什么。

在启动时从文件中读取单词,或者至少读取行索引,并根据需要使用。

我将创建一个名为random_words的单独模块,或者类似的模块,将列表隐藏在其中,并将ChoiceWords_列表封装在接口函数中


至于从文件中加载它们,因为我无论如何都需要键入它们,而python文件最终只是一个文本文件,我会在那里键入它们,可能每行一个,以便于维护。

您可以将每个单词存储在文本文件中的单独一行,然后使用csv模块中的reader在启动时将文件加载到列表中。然后,您可以从列表中随机选择一个单词:

import csv

FILENAME = 'word_list.txt'
word_list = []

# Open word list and get words
with open(FILENAME, 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        word_list.append(row)

即使有五千个单词,你也不应该超过五十千兆字节的RAM,所以我认为这是一个有效的方法。

< P>我把所有的单词都放在一个平面文本文件中,每行一个:

cat
dog
....
只要在需要时使用以下一个衬里将其装入即可:

word_list = [word.rstrip() for word in open("words.txt","r")]
见:

这个解决方案更加优雅,因为它只依赖于内置函数。不需要导入模块


一旦加载,请确保将其缓存,但您不希望每次需要新词时都从文件中加载这些词。

我不是这个想法的超级粉丝;单词列表似乎应该是数据的一部分,而不是代码的一部分,模糊这两件事之间的界限往往会导致麻烦。您还没有定义高效。高效的查找、内存、寻道时间…什么?没有必要使用csv模块来读取如此简单的文件。用openwords.txt作为f:words=[ln.strip for ln in f]就足够了。或者甚至单词=f.read.split,因为5000个单词不是特别大。5000个单词不多。按照当代的标准,5000000并不是那么多。在5000000000时,您可能应该使用anydbm-键是转换为字符串的整数,值是您的单词。如何关闭该文件?我仔细研究了一下,您的方法被认为是最优雅的,但是它留给我的问题是如何关闭文件以释放任何系统资源。当python看到一个单行程序打开时,它不会将对象分配给变量,它是否天生知道关闭结果文件对象?谢谢你,肖恩!如果您使用该语句,它将在完成后自动清理并关闭文件:使用openwords.txt,r as f:word_list=[word.rstrip for word in f]——但我的示例没有正确地关闭文件,这是正确的。