我正在寻找列表中的单词以不同的组合方式连接在一起,但它只返回单个单词结果。我正在寻找类似于' whywho' ' whatwhywhen' ' howwhywhatwho'等
import random, sys
words = ['why', 'who', 'what', 'why', 'when', 'how']
for i in range(100):
print ''.join(random.choice(words[:randint(1, 4)]))
答案 0 :(得分:7)
使用随机包中的sample
函数。
import random
words = ['why', 'who', 'what', 'why', 'when', 'how']
for i in range(100):
print ''.join(random.sample(words, random.randint(1,4)))
修改强>
如果您不关心要重复的元素,
for i in range(100):
arr = random.sample(words, random.randint(1,4))
# select a random element from arr and append to self
arr.append(random.choice(words))
print ''.join(arr)
如果您不希望重复此操作,则重复已经存在,
arr = random.sample(words, random.randint(1,4))
# first check if array contains repetetive elements or not
# if contains, go and join the list, otherwise select a random element
# from array and add to that array again
if not [el for el in arr if arr.count(l) > 1]:
arr.append(random.choice(words))
print ''.join(arr)
您可能还想使用为列表定义的insert
方法,它只是将一个元素插入到列表中的所需索引中。
arr = random.sample(words, random.randint(1,4))
if not [el for el in arr if arr.count(el) > 1]:
r = random.choice(arr)
index_of_r = arr.index(r)
arr.insert(index_of_r, r)
print ''.join(arr)
检查this以查找最后一个。
答案 1 :(得分:1)
你非常接近答案!
random.choice
从输入序列返回一个随机元素。 你正在做的是你从words
列表中生成一个随机大小的片段,从中选择一个元素。
以下是您想要的:
''.join(random.choices(words, k=random.randint(1, 4)))
random.choices
从输入序列返回k
大小的随机元素列表。这些元素选择 with replacement ,这意味着您可能会在words
中出现多个元素。
答案 2 :(得分:-1)
试一试。只需找到一个随机索引,并使用随机列表join
。要计算单词生成的次数,请使用Counter
名称空间中的collections
对象。
import random as rand
import sys
from collections import Counter
words = ['why', 'who', 'what', 'why', 'when', 'how']
list = []
for i in range(100):
# print(words[rand.randint(1, 4)].join(words[:rand.randint(1, 4)]))
# print(rand.sample(words, rand.randint(1, 4))) Prints out a 'list' of current combination
list += rand.sample(words, rand.randint(1, 4))
c = Counter(list)
print(c) # Counter({'why': 93, 'who': 48, 'what': 46, 'how': 46, 'when': 35})