如[1,2,3,4]可分为[2, 3], [4, 1];[2, 4, 6, 7, 8, 10]可分为[2, 4, 6, 7], [10, 8]
def split_list(list1):
# 列表排序,全给第一个列表
one_list = list(list1)
one_list.sort()
# 第二个列表
two_list = []
#列表数的个数
n = len(one_list)
#列表数的总和
total = sum(one_list)
#总和一半
half_total = total / 2
#临时和
s = 0
# 从数值最大的数开始遍历列表
for i in range(n-1, -1, -1):
# 预判该数字加和结果
ns = s + one_list[i]
if ns > half_total:
# 如果超出半和则跳过
continue
else:
# 如果未超过半和,取该元素加和
s += one_list[i]
#从one_list中将元素转移到two_list
two_list.append(one_list[i])
one_list.pop(i)
#如果最终和与半和之差,不够最小元素,则完成
if abs(s - half_total) < one_list[0]:
break
return one_list, two_list