Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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_List_Random_Sample - Fatal编程技术网

Python 我想从一个列表中随机选择项目,并将其添加到另一个列表中,而无需替换

Python 我想从一个列表中随机选择项目,并将其添加到另一个列表中,而无需替换,python,list,random,sample,Python,List,Random,Sample,我试图从一个列表中随机选择项目,并将它们添加到另一个列表中 我从中选择的元素列表如下所示: data=[2,3,4,7,8,12,17,24,27,33,35,36,37,38,40,43,44,50,51,54] 我想从这个列表中随机选取一个元素,并将其添加到四个列表中的一个,直到每个列表都有相同数量的元素 lists=[[1,'x','x','x','x','x'],[3,'x','x','x','x','x'],[5,'x','x','x','x','x'],[7,'x','x','x'

我试图从一个列表中随机选择项目,并将它们添加到另一个列表中

我从中选择的元素列表如下所示:

data=[2,3,4,7,8,12,17,24,27,33,35,36,37,38,40,43,44,50,51,54]
我想从这个列表中随机选取一个元素,并将其添加到四个列表中的一个,直到每个列表都有相同数量的元素

lists=[[1,'x','x','x','x','x'],[3,'x','x','x','x','x'],[5,'x','x','x','x','x'],[7,'x','x','x','x','x']]
我尝试过使用random.choice,但这给了我重复的结果:

def fill_lists(data):
for list in lists:
    for n,i in enumerate(list):
        if i=='x':
            list[n]= random.choice(data)

我希望我的函数返回一个包含4个列表的列表,每个列表包含数据列表的随机样本,并且没有重复项。我还希望每个列表的第一个元素是我已经放入列表中的值。

您可以使用
随机。sample

 data=[2,3,4,7,8,12,17,24,27,33,35,36,37,38,40,43,44,50,51,54]
 random.sample(data, 5)
 # [27, 12, 33, 24, 17]
要获取它的嵌套列表,请使用列表

 [random.sample(data, 5) for _ in range(5)]
 # [[40, 35, 24, 54, 17],
 #  [17, 54, 35, 43, 37],
 #  [40, 4, 43, 33, 44],
 #  [51, 37, 35, 33, 8],
 #  [54, 4, 44, 27, 50]]
编辑:以上不会给你唯一的值;对于唯一值,您应该接受上述答案。我把问题解释错了

import random
data=[2,3,4,7,8,12,17,24,27,33,35,36,37,38,40,43,44,50,51,54]
random.shuffle(data)
lists = [data[i:i+len(data)/4] for i in range(0, len(data), len(data)/4)]
print(lists)
从你的初始列表中随机抽取将具有与洗牌相同的效果,然后按顺序抽取。然后可以将其拆分为子列表。如果需要对子列表进行排序,只需在之后将排序映射到列表即可

您可以通过更改
len(data)/4的除数来更改组数

编辑:我错过了你问题的这一部分:

heads = [1,3,5,7]
[q.insert(0,p) for p,q in zip(heads,lists)]

您可以尝试这样做,修改
d
函数中的范围,以调整到所需的数字元素

import random

def f(data):
    val = random.choice(data)
    ix = data.index(val)
    data.pop(ix)
    return val, data

def d(data):
    topholder = []
    m = len(data)/4
    for i in range(4):
        holder = []
        for n in range(m):
            holder.append(f(data)[0])
        topholder.append(holder)
    return topholder

d(data)

这将始终为您提供4个无重复的随机采样值列表。

另一个基于洗牌的列表,但确保所有子列表具有相同的大小,以防元素数无法除以列表数(例如,尝试7)


这是一个动态函数,返回一个列表列表,其中每个列表以指定的值开头。嵌套列表的数量由起始值的数量决定


它适用于Python2.x和Python3.x,但对于Python2.x,您应该将
range()
更改为
xrange()
更好地利用内存。

首先对数据中的值进行随机化/洗牌,然后开始填充列表您正在对数据进行置乱并将其拆分。不知道如何在Python中执行此操作,但我确信有一个对
拆分(示例(数据),rep(1:4,5))
我认为OP希望将值放入一个新列表中,因此列表=[data[I:I+4]对于范围(0,len(数据),4)]中的i,我将把值放入一个新列表中。我认为旧的列表可以被丢弃,但如果不是这样,他或她可以在洗牌之前复制数据。这很公平。我只是尝试匹配OPs命名,以得到与example@dashiell这是Python2.x还是Python3.x?这个代码在Python 3.x中不起作用,但是打印的方式表示Python 3.XI想要确保在编辑列表时,我可以将列表的第一个元素保持为预选值。
from random import shuffle

def split(data, n):   
    size=int(len(data)/n);
    for i in range(0, n*size, size):
        yield data[i:i+size]


data=[2,3,4,7,8,12,17,24,27,33,35,36,37,38,40,43,44,50,51,54]
shuffle(data)
list(split(data, 5))
import random

def get_random_list(element_list, starting_values, size_per_group):
    num_of_groups = len(starting_values)
    size_per_group -= 1
    total_elements = num_of_groups * size_per_group
    random_data = random.sample(element_list, total_elements)
    return [[starting_values[x]] + random_data[x * size_per_group:(x + 1) * size_per_group] for x in range(num_of_groups)]

data = [2, 3, 4, 7, 8, 12, 17, 24, 27, 33, 35, 36, 37, 38, 40, 43, 44, 50, 51, 54]

print(get_random_list(data, starting_values=[1, 2, 3, 4, 5, 6], size_per_group=2))
# OUTPUT: [[1, 36], [2, 54], [3, 17], [4, 7], [5, 35], [6, 33]]
print(get_random_list(data, starting_values=[9, 3, 5], size_per_group=6))
# OUTPUT: [[9, 54, 2, 7, 38, 24], [3, 35, 8, 37, 40, 17], [5, 44, 4, 27, 50, 3]]