Python 从二维列表中随机抽样,不含numpy

Python 从二维列表中随机抽样,不含numpy,python,list,random,Python,List,Random,我有一个庞大的数据集,但为了简化问题,可以考虑一个4x42D列表 想要创建一个包含5个元素的新列表,该列表是从4x4列表中随机选择的,无需使用numpy或任何附加库 编辑: 我想用随机库函数随机选取该列表中的5个元素 输出可能类似于新的choosen元素列表: ['j', 'False', 'a', 8, 66] 希望它足够清晰。(您现在的列表不是很有效的语法,但正在修复): 导入itertools >>>随机输入 >>>list_2d=['j','k','z','p'], ... [1,6

我有一个庞大的数据集,但为了简化问题,可以考虑一个4x42D列表

想要创建一个包含5个元素的新列表,该列表是从4x4列表中随机选择的,无需使用numpy或任何附加库

编辑:

我想用随机库函数随机选取该列表中的5个元素

输出可能类似于新的choosen元素列表:

['j', 'False', 'a', 8, 66]
希望它足够清晰。

(您现在的列表不是很有效的语法,但正在修复):

导入itertools >>>随机输入 >>>list_2d=['j','k','z','p'], ... [1,6,8,9], …[8,True,0,'a'], …[66,'False','12','5']] >>>随机选择(列表(itertools.chain(*list_2d)),k=5) ['False','12','8',6','k']
itertools.chain
调用会将其展平为1d列表,
random.choices
函数可以处理该列表以进行替换采样:


此外,如果没有完整问题的更多细节,就很难知道该解决方案是否适用于“庞大的数据集”-它会创建完整列表的一个新副本,作为1d列表,因此如果使用太多内存,我们需要查看数据最初来自何处,如果您可以首先避免列表结构。

使用随机模块,您可以使用列表理解:

import random

list_2d = [... your list 4X4]
randmly_chosen = [random.choice(random.choice(list_2d)) for _ in range(5)]

扁平化
ls
的思想仍然可以从
numpy
中借用,而无需使用其方法:

ls = [['j', 'k', 'z', 'p'],
      [1,6,8,9],
      [8,True,0,'a'],
      [66,'False', '12', '5']]

flat_ls = []
for n in ls: 
    flat_ls.extend(n)
from random import shuffle
shuffle(flat_ls) #dynamic change of flat_ls, very fast
>>> flat_ls[:5]
['12', 66, 8, 'j', 'a']

遗憾的是,这还不够清楚。。。是否要选择嵌套列表中的任何项目?你能发布你试过的吗?我编辑了我的问题。谢谢你的反馈。我建议给出一个粗略的尺寸,而不是说“巨大”,数量级的估计就足够了。e、 g.您希望它与大约10亿x 100亿的2d阵列(即10个元素)一起使用。请注意,在这一点上,您几乎肯定不会使用标准库,但千万不要担心您是对的。从现在起我将听从你的建议。谢谢你@SamMason
ls = [['j', 'k', 'z', 'p'],
      [1,6,8,9],
      [8,True,0,'a'],
      [66,'False', '12', '5']]

flat_ls = []
for n in ls: 
    flat_ls.extend(n)
from random import shuffle
shuffle(flat_ls) #dynamic change of flat_ls, very fast
>>> flat_ls[:5]
['12', 66, 8, 'j', 'a']