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(n-1):
partitions.append(lst[i*p:i*p+p])
else:
partitions.append(lst[i*p+p:])
print('初始分组结果:', partitions)
#不停地调整各个子列表中的数字
#直到n个子列表中数字之和尽量相等
times = 0
while times < 1000:
times += 1
#元素之和最大的子列表和最小的子列表
maxLst = max(partitions, key=sum)
minLst = min(partitions, key=sum)
#把大的子列表中最小的元素调整到小的子列表中
m = min(maxLst)
i = [j for j, v in enumerate(maxLst) if v==m][0]
minLst.insert(0, maxLst.pop(i))
print('第{0}步处理结果:'.format(times), partitions)
first = sum(partitions[0])
for item in partitions[1:]:
if abs(sum(item)-first) > threshold:
break
else:
break
else:
print('很抱歉,我无能为力,只能给出这样一个结果了。')
return partitions
lst = [random.randint(1, 100) for i in range(10)]
print(lst)
result = numberSplit(lst, 3, 5)
print('最终结果:', result)
#输出各组数字之和
print('各子列表元素之和:')
for item in result:
print(sum(item))
运行结果一:
运行结果二:
运行结果三:
Python把列表中的数字尽量等分成n份相关推荐
- python求1到n的乘积_Python如何计算列表中所有数字的乘积?(代码示例)
在Python中如何将列表中所有数字相乘,然后返回乘积值.下面本篇文章就来给大家介绍三种将列表中的所有数字相乘.计算乘积值的方法,希望对大家有所帮助. 方法一:使用遍历 将变量product的值初始化 ...
- python中列表用某个数字出现的次数_Python实现统计给定列表中指定数字出现次数的方法...
本文实例讲述了Python实现统计给定列表中指定数字出现次数的方法.分享给大家供大家参考,具体如下: 直接看实现: #!usr/bin/env python #encoding:utf-8 ''''' ...
- python 列表中的数字转字符串_python 将列表中的字符串转为数字
python 将列表中的字符串转为数字 转自:https://www.jb51.net/article/86561.htm 本文实例讲述了Python中列表元素转为数字的方法.分享给大家供大家参考,具 ...
- python 将列表中的字符串转为数字_python 将列表中的字符串转为数字
本文实例讲述了python中列表元素转为数字的方法.分享给大家供大家参考,具体如下: 有一个数字字符的列表: numbers = ['1', '5', '10', '8'] 想要把每个元素转换为数字: ...
- Python 中将列表中的每个元素除以一个数字
Python 中将列表中的每个元素除以一个数字: 使用列表理解来遍历列表. 在每次迭代中,将当前列表元素除以数字. 新列表将包含除法结果. my_list = [8, 12, 20]# ✅ divid ...
- python统计列表中元素个数_python中计算一个列表中连续相同的元素个数方法
python中计算一个列表中连续相同的元素个数方法 最简单的例子: a = [1,1,1,1,2,2,2,3,3,1,1,1,3] # 问:计算a中最多有几个连续的1 很明显,答案是4 如果用代码实现 ...
- 如何利用python提取字符串中的数字
目录 一.isdigit() 函数 二.filter() 函数 三.提取一段字符串中的数字 四.匹配指定字符串开头的数字 参考资料 一.isdigit() 函数 isdigit() 函数是检测输入字符 ...
- python删除列表中的重复元素并保持相对顺序不变
python删除列表中的重复元素并保持相对顺序不变 从列表中删除重复项以便所有元素都是唯一的同时保持原有相对顺序不变 对于列表我们可以使用如下方法: l1 = [1,7,7,8,5,5,4] l2 = ...
- python 删除列表中的指定元素
python 删除列表中的指定元素 def delete_list(list1,ele):"""删除列表中的指定元素:param list1:原列表:param ele: ...
最新文章
- 华为与思科VRRP协议
- nginx反向代理监听非80端口造成的端口丢失解决方案
- hdu 5011(博弈)
- ios:ScrollView联动效果
- 互联网通用架构技术----缓存雪崩
- python实现单链表快速排序升序linkedqueue_数据结构1
- linux常用yum 安装基本包_linux - yum常用命令
- broadcom linux网卡驱动下载,Broadcom Bcm57xx芯片网卡驱动Linux下安装方法
- 想入行SAP咨询,最具性价比的方式
- Python爬取《你是我的荣耀》——词云图
- Qt 之 QQ系统表情(五)
- 树莓派开发笔记(七):GPIO口的SPI使用(BME280三合一传感器:测量温度、湿度、气压、海拔高度)
- Elasticsearch中keyword和numeric对性能的影响分析
- IR(红外遥控)基本原理
- UserAgent 解析
- 打开桌面计算机投屏到扩展屏,win10电脑桌面投屏到电视教程_Win10电脑怎么投屏到电视...
- PHP-获取目录中的所有文件和子目录
- 鸿蒙开发(13)---ProgressBar与RoundProgressBar组件
- C语言实现扫雷小游戏(扩展版)
- Android RK3399 UVC摄像头格式异常
热门文章
- android studio 本地html,android - 从当前HTML文件Android Studio中打开本地HTML文件? - 堆栈内存溢出...
- Java获得中文输入_使用java简单实现根据输入的汉字,得到汉字的首字母
- Qt实现Linux下模拟点击界面,如何利用QT实现模拟鼠标点击?
- 三次握手的本质_关于TCP三次握手,这是我见过最好的解读了,通俗易懂
- 余弦函数导数推导过程_对三角函数深入理解以及换元法的应用
- java thread 输出结果_大神来看看这段程序输出结果是什么?
- springboot怎么返回404_Spring Boot2 系列教程(十三)Spring Boot 中的全局异常处理
- linux下比较文件并输出,Linux使用diff命令比较文件的方法
- 计算机winform参考文献写,毕业论文基于C#WinForm的语音通信系统设计.doc
- spring mvc项目在IDEA下使用jrebel热部署报错!!