首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python - 随机将列表分成几乎相等的n个部分

在Python中,random模块提供了许多用于生成随机数的函数。其中,random.sample函数可以从一个序列中随机选择指定数量的元素,并返回一个新的列表。

以下是一个示例代码,将一个包含10个元素的列表随机分成两个相等的子列表:

代码语言:python
复制
import random

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 随机选择5个元素,得到第一个子列表
first_list = random.sample(my_list, 5)
print("第一个子列表:", first_list)

# 随机选择5个元素,得到第二个子列表
second_list = random.sample(my_list, 5)
print("第二个子列表:", second_list)

需要注意的是,random.sample函数会根据输入列表的长度自动选择元素个数,如果元素个数大于等于列表长度,则会返回列表本身;如果元素个数小于列表长度,则会返回一个元素个数等于列表长度的子列表。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

LeetCode1013:数组分成相等部分

https://github.com/pzqu/LeetCode 题目 给你一整数数组 A,只有可以将其划分为三相等非空部分时才返回 true,否则返回 false。...] + A[1] + ... + A[i] == A[i+1] + A[i+2] + ... + A[j-1] == A[j] + A[j-1] + ... + A[A.length - 1])就可以数组三等分...每段相等 总和/3就是每段和 方法一:暴力破解 最直观想法就暴力破解,要把一线段砍成三段,那必然有两条分隔线,所以有两循环来改变分隔线位置。...每次第二段长度增加1、第三段长度减少1,都要进行一次判断是否三相等。...方法二 :数学 这真的是一数学题,如果已知总和,由于三段长度相等,只要找到前两段,那第三段一定相等

1.6K10

Python列表数字尽量等分成n

问题描述:假设一列表中含有若干整数,现在要求将其分成n个子列表,并使得各个子列表整数之和尽可能接近。...下面的代码并没有使用算法,而是直接原始列表分成n个子列表,然后再不断地调整各个子列表数字,从元素之和最大列表中拿出最小元素放到元素之核最小列表中,重复这个过程,知道n个子列表足够接近为止...import random def numberSplit(lst, n, threshold): '''lst为原始列表,内含若干整数,n为拟分份数 threshold为各子列表元素之和最大差值...''' length = len(lst) p = length // n #尽量把原来lst列表数字等分成n份 partitions = [] for i in range...('初始分组结果:', partitions) #不停地调整各个子列表数字 #直到n个子列表中数字之和尽量相等 times = 0 while times < 1000:

3.1K80

php关于数组n随机分成x组,使每组值相近算法

主要原理是,数组从大到小排序,数组1先取数取第一,数组2第2取第2,以此类推 取完第一次数组之后,判断下数组1,数组2,进行一次排序,数据最大排前面(理论上来说,数组1数据最大,因为从大到小排序...) 当数组1是最大时,让数组1取倒数第一值(最小值),数组2取倒数第2值,以此类推 这时候,数组1取得是最小,数组2取是第二小,会让总数开始慢慢接近,以此类推 下面是一n个数字分2组实例代码...,分x组可以自己写咯 <?...arr2);     echo 'arr总数:' .( array_sum($arr1)+array_sum($arr2)); } group_arr(10, 100); 注意,这个算法思路取到不一定是最接近值...,只能说是相对接近并且数字越多精度越高,以下是10100随机数分2组测试图 ?

61100

【动态规划】包含m整数数组分成n个数组,每个数组和尽量接近

1 背景 ClickHouse集群缩容,为保证数据不丢失,计划需要缩容节点上数据,迁移到其他节点上,保证迁移到每个机器上数据量尽量均衡。...2 抽象 包含m整数数组分成n个数组,每个数组和尽量接近 3 思路 这个问题是典型动态规划问题,理论上是无法找到最优解,但是本次只是为了解决实际生产中问题,而不是要AC,所以我们只需要找到一相对合理算法...如果第一数大于等于avg,这个数单独作为一组,因为再加下一数也不会使得求和更接近avg;然后剩下数重新求平均,表示需要让剩下数分配得更加平均,这样可以避免极值影响,然后重新开始下一轮计算...< (a - delta),保存distance = delta - b,然后a入到数组中,继续往下遍历,判断能否找到距离 < distance,如果有则选择距离更小这组,否则选择b加入数组。...: 28 22 3, sum = 53 arr 3 is : 27 10 6 5 2 2 1, sum = 53 4 实现 // 数组分成n个数组,每个数组和尽量接近 func GetAvgArr

6.3K63

Python利用random生成一列表随机

首先,需要导入random模块: import random 随机取1-33之间1随机数,可能重复: random.choice(range(1,34)) print得到一系列随机数,执行一次得到一随机数...(1,34)) 其权重值表示该数或该范围内数输出概率大,输出结果为列表 随机取1-33之间6随机数,不重复: random.sample(range(1,34),6) 得到一无序列表 random.uniform...(a,b) 生成一指定范围内随机符点数,两参数其中一是上限,一是下限 random.randint(a,b) 生成一指定范围内整数。...其中参数a是下限,参数b是上限 PS:python 随机选取列表元素 使用random模块中sample函数 功能: random.sample(seq, k)实现从序列或集合seq中随机选取k独立元素...函数 功能: random.choice(seq)实现从序列或集合seq中随机选取一元素 参数: seq:元组、列表或字符串 实例: In [1]: import random In [2]: f =

5.2K10

2N整数分成两组,每组有N个数,并且满足,这两组绝对值最小。

有人提议说模拟 背包算法....背包算法大概可以表示为给你一包,然后你让这个包尽可能有价值,对应就是,这个包大小就是 sum(c)/2 (这样就可以让他们绝对值最小),然后问题来了,这个算法只会视价值来分配...,不会执着于时候分成两半........但是,他解决思维还是可以借鉴: 背包算法说,我在拿第 i 件时候,分成情况,一种是不拿,一种是拿....有更好方法,就提出来参考参考。...deleteNode(p1); return max2; } } 再接着,突然想起 C++标准算法里面有全排列,发现用他的话,也可以很容易写出来,不过,...) sum+=a[i]; c = sum/2; node * h = new node(-1); int max = iSelectj(2*n,n,c,h);

86321

一日一技:在Python里面如何获取列表最大n元素或最小n元素?

我们知道,在Python里面,可以使用 max和 min获得一列表最大、最小元素: a = [4, 2, -1, 8, 100, -67, 25]max_value = max(a)min_value...答案是使用Python自带 heapq: import heapq a = [4, 2, -1, 8, 100, -67, 25, 3, 4, 5, 6, 7, 55]max_three = heapq.nlargest...: 这里 heapq是一用于处理 堆这种数据结构模块。...它会把原来列表转换成一堆,然后取最大最小值。 需要注意,当你要取是前n大或者前n数据时,如果n相对于列表长度来说比较小,那么使用 heapq性能会比较好。...但是如果n列表长度相差无几,那么先排序再切片性能会更高一些。

8.7K30

如何在 Python 中生成一范围内 N 唯一随机数?

本文详细介绍如何在 Python 中生成一范围内 N 唯一随机数,以满足我们需求。使用 random 模块Python random 模块提供了生成随机函数和方法。...最后,我们 set 转换为列表并返回。注意事项需要注意以下几点:如果给定范围内数字个数小于要生成随机数个数,那么函数可能会陷入无限循环。因此,确保给定范围足够大以容纳所需唯一随机数。...使用 random.sample 函数除了自己编写函数来生成唯一随机数,Python random 模块还提供了 sample 函数来直接生成给定范围内 N唯一随机数。...然后,我们调用 random.sample 函数,并传递范围对象和要生成随机数个数。函数返回一包含唯一随机列表。...因此,确保给定范围足够大以容纳所需唯一随机数。结论本文介绍了在 Python 中生成一范围内 N 唯一随机方法。我们使用了 random 模块提供函数和方法来实现这一目标。

64530

2023-03-16:给定一由 0 和 1 组成数组 arr ,数组分成 3 非空部分,使得所有这些部分表示相同

2023-03-16:给定一由 0 和 1 组成数组 arr ,数组分成 3 非空部分, 使得所有这些部分表示相同二进制值。...答案2023-03-16: 给定一由 0 和 1 组成数组 arr,需要将其分成非空部分,使得每个部分中 1 数量相等。如果无法做到,则返回 [-1, -1]。...输出:长度为 2 数组,表示能够 arr 分成部分 第一和第二部分结束位置(下标从 0 开始)。如果无法做到则返回 [-1, -1]。...= 0 { // 如果无法分成相等部分,则返回 [-1, -1] return vec!...[1, 5]); ``` 总结和展望: 本文介绍了一种简单算法,可以解决给定一由 0 和 1 组成数组 arr,需将其分成非空部分,使得每个部分中 1 数量相等问题。

23420

python: 列表字符串 连接成一 长路径

今天实习公司分配了一数据处理任务。...在列表字符串连接成一长路径时,我遇到了如下问题: import os path_list = ['first_directory', 'second_directory', 'file.txt...这我就纳闷了: ['first_directory', 'second_directory', 'file.txt']   细思后想明白了,os.path.join 输入必须是一或多个 str ,而不能是...字符串列表本质依然是list。指令把 字符串列表 理解成了一 str ,就相当于对 单str 进行 os.path.join ,最后当然没变化啦。   ...os.path.join(path_list) head = '' for path in path_list: head = os.path.join(head, path) print head   终于列表字符串连接成了一完整长路径

2.9K20

盘点一Python自动化办公需求——一份Excel文件按照指定列拆分成多个文件

一、前言 前几天在Python星耀群【维哥】问了一Python自动化办公处理问题,一起来看看吧,一份Excel文件按照指定列拆分成多个文件。...如下表所示,分别是日期和绩效得分,如: 其中日期列分别是1月到8月份,现在他有需求,需要统计每一绩效情况,那么该怎么实现呢?...代码运行之后,可以得到预期效果,如下图所示: 顺利地解决了粉丝问题。 三、总结 大家好,我是皮皮。...这篇文章主要盘点了一Python自动化办公Excel拆分处理问题,文中针对该问题,给出了具体解析和代码实现,帮助粉丝顺利解决了问题。...往期精彩文章推荐: if a and b and c and d:这种代码有优雅写法吗? Pycharm和Python到底啥关系?

19060

算法系列 | 快速排序

根据快排基本思想,可知快排过程中需要有递归操作,因此我们需要自定义一函数qsort()用于包装代码 因为经过第一次排序后,我把序列分成部分:一部分是比基数小数据组成序列,一部分是比基数大数据组成序列...,还有一部分是基数本身或者跟基数相等数据组成序列 为了便于区分这些序列,我这里对这三部分分别建了相应列表left_base \ equal_base \ right_base,用于存储对应数据...然后对 left_base 和 right_base 这两部分进行递归处理 最后这三部分用拼接符“+”进行拼接,最终获取快排后结果 06 编写代码 编写函数代码: import random #导入随机模块...(List) #随机选取一基数 left_base = [] #比基数小部分 right_base = [] #比基数大部分 equal = [] #跟基数相等部分...else: return List #如果列表只有一值得话,直接返回列表,无需排序 07 验证代码 验证代码: 一列表值可能会出现三种情况: 只有一值 有两或两以上

46320

2023-03-16:给定一由 0 和 1 组成数组 arr ,数组分成 3 非空部分, 使得所有这些部分表示相同二进制值。 如果可以做到,请返回任

2023-03-16:给定一由 0 和 1 组成数组 arr ,数组分成 3 非空部分, 使得所有这些部分表示相同二进制值。...答案2023-03-16: 给定一由 0 和 1 组成数组 arr,需要将其分成非空部分,使得每个部分中 1 数量相等。如果无法做到,则返回 -1, -1。...输出:长度为 2 数组,表示能够 arr 分成部分时第一和第二部分结束位置(下标从 0 开始)。如果无法做到则返回 -1, -1。...解法思路: 首先统计整个数组中 1 数量 ones,如果 ones 不能被 3 整除,则说明无法分成相等部分,直接返回 -1, -1。...[1, 5]); 总结和展望: 本文介绍了一种简单算法,可以解决给定一由 0 和 1 组成数组 arr,需将其分成非空部分,使得每个部分中 1 数量相等问题。

1.2K10

【算法入门】用Python手写五大经典排序算法,看完这篇终于懂了!

在合并排序情况下,分而治之方法输入值集合划分为两个大小相等部分,对每个一半进行递归排序,最后这两排序部分合并为一排序列表。...在Python中实现合并排序 合并排序算法实现需要两不同部分: 递归地输入分成两半函数 合并两半部函数,产生一排序数组 这是合并两不同数组代码: def merge(left, right...快排排序过程 快速排序流程 黄线表示阵列分成列表:low,same,high。绿线表示排序并将这些列表放在一起。 选择pivot元素 为什么上面的实现会pivot随机选择元素?...但是,如果输入数组已排序或几乎已排序,则使用第一或最后一元素作为pivot可能导致最坏情况。pivot随机选择使其更有可能使快排选择一接近中位数值并更快地完成。...你可以将其简化为O(n log 2 n),因为对数部分增长快于线性部分随机选择pivot使最坏情况发生可能性很小。这使得随机pivot选择对于该算法大多数实现都足够好。

1.2K10

快排究竟有多快?

则阶段1迭代中生成一空子块、pivot,及一大小(n-1)子块,则时间复杂度为θ(n) 递归方程: 如果这种情况在每个分区中都重复发生,那么每个递归调用处理一比前一列表小1列表。...如前所说,如每次执行分区时,都能将列表分成几乎相等两个子块。这意味着每次递归调用都要处理一只有一半大小列表。因此,在到达大小为1列表之前,我们只能进行嵌套调用。...这意味着调用树深度为,但是在调用树同一级别上没有两调用处理原始列表相同部分;因此,每个级别的调用总共只需要O(n)时间(每个调用都有一些固定开销,但是由于每个级别上只有O(n)调用,所以这被包含在...该算法查找已排序(运行)数据子序列,并使用它们对其余部分进行更有效排序。 这是通过合并运行直到满足特定条件来完成。 自2.3版以来,Timsort一直是Python标准排序算法。...合并两排序列表,A和B,等价于A分成大小相等块,在特殊规则下每个块插入到B中,并合并AB对。

1.2K00
领券