在Python的列表理解中使用Random

时间:2014-08-29 09:18:36

标签: python list random list-comprehension

我有一个名为words的单词列表,我想生成一个包含名为pwds的100个三字元素的列表。 我希望从words列表中为pwds列表的每个元素随机选择这3个单词,并且我想使用列表理解来执行此操作。

此解决方案有效:

pwds = [random.choice(words)+' '+random.choice(words)+' '+random.choice(words) for i in range(0,100)]

它生成一个类似于['correct horse battery', 'staple peach peach', ...]

的列表

但我一直在寻找一种方法来防止重复3次random.choice(words),所以我尝试了这个:

pwds = [(3*(random.choice(words)+' ')).strip() for i in range(0,100)]

但不幸的是,这个解决方案使每个元素都有三次相同的单词(例如:['horse horse horse', 'staple staple staple', ...]),预计会发生这种情况。

你知道如何选择3个随机单词而不重复 (编辑:通过“重复”,我的意思是代码重复,而不是随机单词重复)

编辑:我的问题与被标记为重复的问题不同,因为我正在寻找使用列表理解的方法。我知道如何生成不同的数字,我只是想找到具体的方法。

2 个答案:

答案 0 :(得分:2)

如果你希望这些单词能够在每个三元组中重复,我认为你想要的是:

pwds = [" ".join(random.choice(words) for _ in range(3)) for _ in range(100)]

请注意使用_表示我们实际上并未使用range生成的数字,以及range(0, n)range(n)相同的事实

一个稍微简短的例子:

>>> import random
>>> words = ['correct', 'horse', 'battery', 'staple']
>>> [" ".join(random.choice(words) for _ in range(3)) for _ in range(5)]
['horse horse correct', 
 'correct staple staple', 
 'correct horse horse', 
 'battery staple battery', 
 'horse battery battery']

答案 1 :(得分:1)

您可以使用连接功能和列表推导来不重复random.choice

pwds = [' '.join([random.choice(words) for _ in range(3)]) for _ in range(100)]