我正在尝试在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
有什么办法可以实现吗?
答案 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