Python:列表中的非重复随机值

时间:2015-06-17 16:55:45

标签: python string python-2.7 random

我正在尝试在python 2.7中编写一个程序,它必须选择多个随机变量并将其打印出来。但是该变量不能与先前打印的任何变量相同。

我一直在寻找谷歌和这个网站,我还没有找到任何字符串(我到目前为止只发现了整数)。这是一个例子:

sentences = [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p]
print (random.choice(sentences)) + (random.choice(sentences)) + (random.choice(sentences))

>>> a + b + a

我不希望有重复,我希望它是这样的:

>>> a + b + c

有什么办法可以实现吗?

6 个答案:

答案 0 :(得分:10)

您可以使用random.sample()

  

random.sample(population, k)

     

返回从k序列中选择的唯一元素的population长度列表。用于无需替换的随机抽样。

In [13]: "+".join(random.sample(sentences,3))
Out[13]: 'a+b+c'

答案 1 :(得分:3)

与之前的值不同的随机值并非随机。

也许您想使用random.shuffle来随机重新排列项目列表,然后您可以一次关闭一个项目?

答案 2 :(得分:1)

您可能想要random.sample

>>>mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>print(sum(random.sample(mylist, 3)))
13

OR

>>>"+".join(random.sample(map(str, mylist),3)) #if string map(str,) can avoid
'6+1+3'

答案 3 :(得分:1)

import random

def generate_random(my_list, number_of_choices):
    chosen = []
    cnt = 0
    while cnt < number_of_choices:
        choice = random.choice(my_list)
        if choice not in chosen:
            chosen.append(choice)
            cnt +=1
    return chosen

答案 4 :(得分:0)

import random
import string

def sample_n(arr, N):
    return random.sample(arr, N)

sentences = list(string.ascii_lowercase)

print "".join(sample_n(sentences, 3))

我认为如果不使用指定的API函数来解释如何实现sample函数会很好:

>>> arr = range(10)
>>> arr
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> out = [arr.pop(random.randint(0,len(arr))) for i in xrange(3)]
>>> out
[0, 1, 8]

答案 5 :(得分:-5)

我会喜欢这个

#!/usr/bin/python
# -*- coding: utf-8 -*-

import random
sentences = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p']

random.shuffle(sentences)

n=3 # amount of items to display

out=''
for item in sentences:
    out=out+ item + ' + '
    n -=1
    if n==0:
        break


print out[:-2]

输出1

o + p + g

输出2

b + a + j

输出3

f + c + i