Python 绘制定义大小的样本,直到列表为空。最后抽签的大小
我有一个数字列表Python 绘制定义大小的样本,直到列表为空。最后抽签的大小,python,random,Python,Random,我有一个数字列表mylist,我想从这个列表中抽取大小为pair\u size的样本。继续绘制样本,直到mylist为空 我的挑战是确保最后一个样本的大小也只能是pair\u size 我的代码可以工作,但相当冗长和复杂 因此,我的问题是:我如何改进我的解决方案,使其(I)更具可读性,以及(ii)也适用于非连续的对大小?? import random mylist = list(range(10000)) pair_size = [5,6,7] pairs = [] while len(my
mylist
,我想从这个列表中抽取大小为pair\u size
的样本。继续绘制样本,直到mylist
为空
我的挑战是确保最后一个样本的大小也只能是pair\u size
我的代码可以工作,但相当冗长和复杂
因此,我的问题是:我如何改进我的解决方案,使其(I)更具可读性,以及(ii)也适用于非连续的对大小?
?
import random
mylist = list(range(10000))
pair_size = [5,6,7]
pairs = []
while len(mylist) > (pair_size[0] + pair_size[-1]):
n = random.choice(pair_size)
pairs.append(mylist[:n])
mylist = mylist[n:]
if len(mylist) in pair_size:
pairs.append(mylist)
else:
if (len(mylist) - pair_size[0]) in pair_size:
l1,l2 = mylist[:pair_size[0]], mylist[pair_size[0]:]
pairs.append(l1)
pairs.append(l2)
elif (len(mylist) - pair_size[-1]) in pair_size:
l1,l2 = mylist[:pair_size[-1]], mylist[pair_size[-1]:]
pairs.append(l1)
pairs.append(l2)
elif (len(mylist) - pair_size[1]) in pair_size:
l1,l2 = mylist[:pair_size[1]], mylist[pair_size[1]:]
pairs.append(l1)
pairs.append(l2)
else:
raise ValueError("Pair_size must contain consecutive numbers")
这个解决方案不起作用。给定最后一对的大小可能不在
pair\u size
中,这就是为什么该行是可选的。你真的需要mylist的所有成员成对吗?你能忽略最后几个吗?当无法完全使用mylist元素时会发生什么情况?但我需要能够绘制所有列表成员。如果某些组合在数学上不可能做到这一点,那么唯一的选择就是事先确定并更改mylist
import random
mylist = list(range(20))
pair_size = [5,6,7]
pairs = []
min_size = min(pair_size)
while len(mylist) >= min_size:
n = random.choice(pair_size)
if len(mylist) >= n:
pairs.append(mylist[:n])
mylist = mylist[n:]
pairs.append(mylist) # optional
print(pairs)