Python将一个列表中的元素分成两组,使得每组数据之和尽可能的相等

Python将一个列表中的元素分成两组,使得每组数据之和尽可能的相等

# 分离数组
def split_array(arr):
    # 获取数组并排序
    a = list(arr)
    #a.sort()
    # 另一个数组

    b = list()
    # 以上a,b作为待返回的数组

    # 计算数组大小
    n = len(a)#1000

    #求和
    smr = sum(a)

    # 和的一半,简称半和
    hs = smr / 2

    # 临时和
    s = 0

   # 从最大的数字开始遍历数组
    for i in range(-1,0-n,-1):
        # 预判该数字加和结果

        ns = s + a[i]
        if ns > hs:
            # 如果超出半和则跳过
            continue
        else:
            # 如果未超过半和,则:
            # 1, 取该元素加和
            s += a[i]
            # 2, 从 a 中将元素转移到 b
            b.append(a[i])
            a.pop(i)
            # 如果最终和与半和之差,不够最小元素,则完成
            if abs(s - hs) <= a[-1]:
                break
    return a, b

if __name__ == '__main__':
    # 测试:
    # [1,2,3,4,5] -> [1,2,5] & [3,4]
    # arr = test_input()
    print(split_array([118, 299, 472, 485, 468, 392, 515, 800, 982]))

打印结果:
([118, 299, 472, 485, 468, 392, 800], [982, 515])

你可能感兴趣的:(Python,python)