从具有特定字符的列表中随机选择

时间:2017-06-23 21:00:52

标签: python python-2.7

所以,我有一个文本文件(充满文字)我放入一个列表。我希望Python 2.7能够从列表中随机选择一个单词,但是要以特定的字符开头。

列表代码:

d=[]

with open("dic.txt", "r") as x:
    d=[line.strip() for line in x]

这是一款名为Shiritori的游戏。用户首先说出英语中的任何单词,即dog。然后程序必须从最后一个字符开始选择另一个单词,在本例中为'g'。

游戏代码:

game_user='-1'

game_user=raw_input("em, lets go with ")

a1=len(game_user)

我需要一个能够随机选择以该字符开头的单词的程序。

4 个答案:

答案 0 :(得分:2)

因为你的游戏特别依赖于带有固定起始字母的随机单词,所以我建议先将所有单词排序成一个以起始字母为键的字典。然后,您可以随机查找以给定字母开头的任何单词:

d=[]
lookup = {}

with open("dic.txt", "r") as x:
    d=[line.strip() for line in x]

for word in d:
   if word[0] in lookup:
      lookup[word[0]].append(word)
   else:
      lookup[word[0]] = [ word ]

现在您有一个dict'查找'你的所有单词都按字母排序。 当您需要一个以前一个单词的最后一个字母开头的单词时,您可以随机选择列表中的元素:

import random
random_word = random.choice(lookup[ game_user[-1] ])

答案 1 :(得分:1)

为了获得以用户输入的最后一个字母开头的所有值的新列表:

choices = [x in d if x[0] == game_user[-1]]

然后,您可以通过以下方式选择一个单词:

newWord = random.choice(choices)

答案 2 :(得分:0)

>>> import random
>>> with open('/usr/share/dict/words') as f:
...     words = f.read().splitlines()
...
>>> c = 'a'
>>> random.choice([w for w in words if w.startswith(c)])
'anthologizing'

显然,您需要将c = 'a'替换为raw_input("em, lets go with ")

答案 3 :(得分:0)

您可以更好地利用更高级的数据结构,但这里有一个镜头:

get_object_or_404(Profile, fk_user=self.request.user)

在创建所有字母及其对应单词的字典后,您可以访问任何特定字词集,如下所示:

CurrentUserDefault

这将为您提供以列表中的a开头的所有单词。然后你可以采取:

words_dict = {}
for row in d:
    # Gives us the first letter
    myletter = row[0]
    if myletter not in words_dict:
        words_dict[myletter] = []
    words_dict[myletter].append(row)

让我知道这是否有意义?