假设我有一张285码的A表。第一个子列表必须有大小为228 (285的80%)的A元素.第二种,大小为A的10%,第三种,大小为A. 的10%,根本不应该有任何共同的成分。整个过程是随机的。
我知道random.choices()和random.sample(),但我认为dup具有公共元素。
发布于 2020-03-01 14:02:45
根据元素的类型,您可以将它们放到哈希映射中,并使用您定义的哈希值。
接下来,遍历这些键,并尝试根据计数将它们放到所需的子列表中。
发布于 2020-03-01 14:16:26
我们可以使用机器学习中常用的技术将数据划分为训练和测试数据集。
步骤如下:
的大小对数据进行洗牌
码
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测试代码
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))输出
a1: 228
a2: 28
a3: 29发布于 2020-03-01 14:17:26
如果订单不重要,那么它很简单:random.shuffle整个列表,然后取所需大小的片。
如果您需要挑选一些元素并保持它们的有序性,它就会变得更加棘手。我能想到的最好的方法就是机械地浏览它:使用random.sample获取第一个子列表所需元素的索引;创建该列表;然后删除这些索引位置,然后重复查找更多的子列表。为了干净地分离元素并避免逻辑错误,我们可以使用列表理解来构建子列表以及新的“剩余”池。如果你使用的是numpy,这可能可以做得更好的面具。
https://stackoverflow.com/questions/60475857
复制相似问题