Python 创建子列表

Python 创建子列表,python,Python,假设我有一张285号的单子。 第一个子列表必须包含大小为228(285的80%)的元素。 第二个,尺寸为A的10%。 第三个,大小为A的10%。 不应该有任何公共元素。 整个过程是随机的 我知道random.choices()和random.sample(),但我知道dup有公共元素 根据元素的类型,可以使用定义的哈希算法将它们放入哈希映射中 接下来迭代键,并尝试根据计数将它们放入所需的子列表中。根据元素的类型,可以使用定义的哈希算法将它们放入哈希映射中 接下来迭代这些键,并尝试根据计数将它们放

假设我有一张285号的单子。 第一个子列表必须包含大小为228(285的80%)的元素。 第二个,尺寸为A的10%。 第三个,大小为A的10%。 不应该有任何公共元素。 整个过程是随机的


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

根据元素的类型,可以使用定义的哈希算法将它们放入哈希映射中


接下来迭代键,并尝试根据计数将它们放入所需的子列表中。

根据元素的类型,可以使用定义的哈希算法将它们放入哈希映射中


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

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

步骤如下:

  • 使用random.shuffle创建数据的随机顺序
  • 根据所需子列表的大小对无序数据进行分区
代码

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))
测试代码

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

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

步骤如下:

  • 使用random.shuffle创建数据的随机顺序
  • 根据所需子列表的大小对无序数据进行分区
代码

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))
测试代码

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

如果顺序不重要,那很简单:
random。将整个列表洗牌,然后按需要的大小切片


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

如果顺序不重要,那么很简单:
随机。将整个列表洗牌,然后按所需大小进行切片


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

使用numpy和
np.random.shuffle()
对列表进行无序排列,然后将其细分为三个不同长度的部分,怎么样?这将避免重复。使用numpy和
np.random.shuffle()
对列表进行无序排列,然后将其细分为三个不同长度的部分,怎么样?这将避免重复。这正是我在提出问题后所做的。无论如何,谢谢你。你知道如何不用切片就能做到这一点吗?@SarthakMaharana——另一种方法是使用sklearn中的例程
train\u test\u split
两次,正如blitu12345回答所描述的那样。无论如何,我没有在搜索它,但无论如何,谢谢:)这正是我问完问题后所做的。无论如何,谢谢你。你知道如何在没有切片的情况下做到这一点吗?@SarthakMaharana——另一种方法是使用sklearn中的例程
train\u test\u split
两次,如blitu12345答案所述。无论如何我都没有搜索,但无论如何谢谢:)