在Python中从单行中随机选择一个单词?

3 投票
2 回答
952 浏览
提问于 2025-04-16 08:26

我想知道怎么选取一行文字,然后把这一行里的所有单词提取出来,最后把它们打印到屏幕上,使用一个集合来存储这些单词。现在我已经有了一些代码:

import random

test = ['''
line 1
line 2
line 3
line 4
line 5
line 6
''']
print (random.choice(test))

2 个回答

1

我猜你想随机选择一些词,但不想重复选择。如果你只是随便挑选词,比如用下面的代码:

do until set empty
   pick a random word and print it

这样做的话,会有两个问题:第一,它不会停止;第二,平均每选择一次,你会每n次重复选择一个词,n是词的总数。

虽然用Python的集合(set)看起来不错,但不方便的是,集合里的元素没有顺序,所以没有简单的方法可以随机选一个元素。(有人可能会说用set#pop可以,因为它会取出下一个随机的元素,但如果我在评分的话,我不会给这个方法满分。)不过,描述中确实提到了集合。

所以我会这样做:

首先,把这些元素放到一个列表里。注意,你现在的做法是把一个包含10行的字符串放进了列表,这样你的列表长度就变成了1。我敢打赌,你最好是这样初始化:

words = [ "test 1","test 2" # and so on
]

接下来,使用choice来选择你的元素,如下所示:

word = random.choice(words)

然后打印出来:

print word

并从列表中移除它:

words.remove(word)

把这个放在一个循环里,直到你用完所有的词。这样你就能得到类似这样的结果:

>>> import random
>>> words = ['a', 'b', 'c' ]
>>> while len(words) > 0:
...    word = random.choice(words)
...    print word
...    words.remove(word)
... 
b
a
c

gnibbler 提到你也可以这样做:

import random
words = [ ... ]
shuf = random.shuffle(words)
for i in shuf: 
   print i

但这样做并没有把列表当作集合来处理;它依赖于通过洗牌(shuffle)来隐含地设定顺序。

3

我觉得这个代码正好满足你的需求:

print random.choice(test[0].split('\n'))
line 5

不过我感觉你可能想要做的事情比这还要多一些。

撰写回答