在Python

时间:2018-02-06 19:23:25

标签: python list join random range

我正在寻找列表中的单词以不同的组合方式连接在一起,但它只返回单个单词结果。我正在寻找类似于' 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)]))

3 个答案:

答案 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})