我有一个名为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个随机单词而不重复 (编辑:通过“重复”,我的意思是代码重复,而不是随机单词重复)?
编辑:我的问题与被标记为重复的问题不同,因为我正在寻找使用列表理解的方法。我知道如何生成不同的数字,我只是想找到具体的方法。答案 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)]