Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 绘制定义大小的样本,直到列表为空。最后抽签的大小_Python_Random - Fatal编程技术网

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)