Python.获取接近某个值的列表

描述一下:
有一个长长的数组,里面的数最大为某个值,比如30;我想从里面提取数组,尽可能接近这个值,把所有可能的,不重复的结果以列表嵌套的方式返回来;
基本思路:

  1. 将列表字符元素转换为整数并排序;
  2. 获取一个列表中的一组数,让他们相加的结果接近于给定数;
  3. 去除找到的元素,把提取的一数组组成的新列表;
  4. 判断最后一个值,结束程序;
'''
用于获取接近某个值的列表
'''


def ls_to_int(ls):
	'''
	将列表字符元素转换为整数并排序
	:param ls:需要转换的列表
	:return:转换后的列表
	'''
	ls = list(map(int, ls))
	ls = list(sorted(ls, reverse=True))
	return ls


def remove_ls(ls, ls_add):
	'''
	去除找到的元素
	:param ls: 原表
	:param ls_add: 原表中提取的一部分数值组成的新列表
	:return: 去除ls_add后的ls
	'''
	for i in range(len(ls_add)):
	remove_value = ls.index(ls_add[i])
	ls.pop(remove_value)
	return ls


def get_ls_equal_num(ls, num):
	'''
	获取一个列表中的一组数,让他们相加的结果接近于给定数
	:param ls: 列表
	:param num: 接近值
	:return: 排序在前的,并接近给定值的一组数列表
	'''
	ls_add = []
	x = 0
	for i in range(len(ls)):
	# print('-' * 30 + str(i))
	x = sum(ls_add)
	# print('x的当前值{}'.format(x))
	if x > num:
	ls_add.remove(ls[i - 1])
	# print('弹出的值{}'.format(ls[i - 1]))
	ls_add.append(ls[i])
	# print('加入当前的ls[i]值{}'.format(ls[i]))
	# 判断最后一个值
	if sum(ls_add) > num:
	ls_add.pop()
	return ls_add


ls = ['1', '30', '30', '30', '30', '1', '27', '23', '1', '17', '15', '11', '9', '7', '6', '2', '2', '2', '1', '1']

print(ls)


def get_all_close2num(ls):
	'''
	获取所有接近30的列表
	:param ls: 需要查找的列表
	:return: 所有接近值列表的列表
	'''
	ls = ls_to_int(ls)
	ls_ = []
	while len(ls) > 0:
	ls_add = get_ls_equal_num(ls, 30)
	# print(ls_add)
	ls_.append(ls_add)
	ls = remove_ls(ls, ls_add)
	return ls_


ls = get_all_close2num(ls)
print(ls)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值