首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建子列表

创建子列表
EN

Stack Overflow用户
提问于 2020-03-01 13:57:51
回答 3查看 49关注 0票数 1

假设我有一张285码的A表。第一个子列表必须有大小为228 (285的80%)的A元素.第二种,大小为A的10%,第三种,大小为A. 的10%,根本不应该有任何共同的成分。整个过程是随机的。

我知道random.choices()和random.sample(),但我认为dup具有公共元素。

EN

回答 3

Stack Overflow用户

发布于 2020-03-01 14:02:45

根据元素的类型,您可以将它们放到哈希映射中,并使用您定义的哈希值。

接下来,遍历这些键,并尝试根据计数将它们放到所需的子列表中。

票数 1
EN

Stack Overflow用户

发布于 2020-03-01 14:16:26

我们可以使用机器学习中常用的技术将数据划分为训练和测试数据集。

步骤如下:

  • 使用random.shuffle创建数据的随机排序
  • 分区基于所需子列表

的大小对数据进行洗牌

代码语言:javascript
复制
import random

def partion_list(a):
  """Partiion list into sublists with 80%/10%/10% splits"""
  # Shallow copy of input list
  b = A[:] #shallow copy
  random.shuffle(b)  # inplace shuffle
  n = len(b)

  # Split with no common elements, but covers all the elements
  a1 = b[:int(0.8*n)]
  a2 = b[int(0.8*n):int(0.9*n)]
  a3 = b[int(0.9*n):]

  return a1, a2, a3

测试代码

代码语言:javascript
复制
A = list(range(285)) # test using list of numbers from 0 to 284
a1, a2, a3 = partion_list(A)

print('a1:', len(a1))
print('a2:', len(a2))
print('a3:', len(a3))

输出

代码语言:javascript
复制
a1: 228
a2: 28
a3: 29
票数 1
EN

Stack Overflow用户

发布于 2020-03-01 14:17:26

如果订单不重要,那么它很简单:random.shuffle整个列表,然后取所需大小的片。

如果您需要挑选一些元素并保持它们的有序性,它就会变得更加棘手。我能想到的最好的方法就是机械地浏览它:使用random.sample获取第一个子列表所需元素的索引;创建该列表;然后删除这些索引位置,然后重复查找更多的子列表。为了干净地分离元素并避免逻辑错误,我们可以使用列表理解来构建子列表以及新的“剩余”池。如果你使用的是numpy,这可能可以做得更好的面具。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60475857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档