Python:当我们不需要重复随机样本

时间:2017-06-09 03:34:31

标签: python random

我的代码

import random

MyList = [[1,2,3,4,5,6,7,8],[a,s,d,f,g,h,h],[q,w,e,r,t,y]]
MyListRandom = []
random_number = 5
i=0
while True:
     random_list = randint(0,len(MyList))
     element_random = random.sample(MyList[random_list], 1)
     if element_random[0] not in MyListRandom:
     i = i+1
     MyListRandom.append(element_random[0])
else:
    continue 
if(i>=random_number):
    break

如果我不想使用此代码进行检查

 if element_random[0] not in MyListRandom:
     MyListRandom.append(element_random[0])

如果我不想要重复的样本,是否有比这更好的方法?

2 个答案:

答案 0 :(得分:1)

如果我理解您的问题理解正确,您只需要原始列表的随机版本,也可以删除原始列表中的任何重复项。如果这是正确的,您可以使用$data<textarea id="comment_id"></textarea> var myCommentID = setInterval(generateCommentID, 1000); function generateCommentID() { var comment = "0123456789-abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var result = "", rand; for (var i = 0; i < 6; i++) { for (var j = 0; j < 4; j++) { rand = Math.floor(Math.random() * comment.length); result += comment.charAt(rand); } } document.getElementById("comment_id").innerHTML = result; }

set

如果您不担心原始列表中的重复项,只是尝试解决shuffle引入的可能重复项,那么这将有效:

MyListRandom = list(set(MyList))
random.shuffle(MyListRandom)

答案 1 :(得分:0)

set random.sample(MyList)将从列表的项目中为您提供唯一的答案。对于您从中采样的MyList中的重复项,您可以将其设为{{3}}。

此外,您不需要每个样本的循环,您只需给它一个k参数,它将返回k个随机样本。所以整个代码可以写成:

# I have flatten the whole list into one list 
element_random = random.sample(set([item for sublist in MyList for item in sublist]), 5)