在Python中从单行中随机选择一个单词?
我想知道怎么选取一行文字,然后把这一行里的所有单词提取出来,最后把它们打印到屏幕上,使用一个集合来存储这些单词。现在我已经有了一些代码:
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
不过我感觉你可能想要做的事情比这还要多一些。