开票时,凑订单金额
回答
收藏

开票时,凑订单金额

DIY_1
2023-07-18 17:53·浏览量:385
DIY_1
影刀高级开发者
发布于 2023-07-18 17:53385浏览

目前代码执行结果是按照顺序凑的,期望每个组合的结果是无限趋近且小于等于112999.99,这样代码逻辑要如何优化,求助求助!

代码如下(数据过多,删去了部分列表项):

data = [32612.96, 26295.54, 25814.85, 15670.27, 14006.83, 13560.36, 13110.03, 12777.2, 11741.32, 11017.53, 8674.6, 8584.24, 8520.62, 7745.66, 7413.93, 6575.78, 6562.25, 6551.26, 6176.34, 6004.16, 5924.64, 5790.65, 5265.64, 5181.83, 4748.84, 4658.4, 4569.96, 4516.32, 4292.84, 4110.42, 4028.53, 4019.75, 4018.87, 3965.91, 3880.8, 3774.55, 3742.61, 3711.61, 3704.01, 3639.36, 3536.42, 3499.24, 3470.81, 3466.03, 3419.96, 3342.05, 3202.58, 3183.86, 3056.08, 3006.4, 2903.03, 2895.43, 2872.89, 2852.7, 2783.1, 2726.59, 2690.71, 2688.2, 2680.22, 2651.51, 2603.44, 2586.03, 2540.19, 2384.63, 2358.83, 2350.39, 2332.73, 2330.25, 2310.9, 2276.81, 2276.56, 2274.99, 2274.84, 2268.04, 2259.37, 2247.82, 2247.78, 2246.31, 2220.23, 2211.1, 2193.77, 2164.42, 2164.03, 2123.71, 2122.99, 2119.36, 2072.66, 2066.63, 2038.83, 2029.78, 2023.68, 2005.19, 2004.27, 1984.03, 1979.56, 1943.14, 1938.45, 1922.08, 1911.46, 1908.66, 1906.27, 1896.58, 1893.6, 1866.84, 1861.35, 1859.2, 1855.88, 1837.12, 1812.25, 1787.65, 1779.03, 24.78, 24.77, 24.69, 24.67, 24.54, 24.4, 24.36, 24.34, 24.14, 23.89, 23.5, 23.43, 23.28, 23.23, 23.18, 23.14, 23.01, 23.01, 22.72, 22.72, 22.71, 22.7, 22.64, 22.58, 22.53, 22.48, 22.34, 22.34, 22.0, 21.96, 21.94, 21.83, 21.65, 21.46, 21.02, 21.01, 20.98, 20.88, 20.78, 20.77, 20.66, 20.12, 19.91, 19.81, 19.78, 19.74, 19.74, 19.66, 19.58, 19.58, 19.5, 19.45, 19.16, 19.09, 18.97, 18.8, 18.78, 18.71, 18.7, 18.68, 18.63, 18.6, 18.55, 18.33, 18.24, 18.22, 18.2, 18.17, 17.84, 17.76, 17.62, 17.42, 17.31, 16.32, 15.49, 14.9, 14.75, 14.74, 14.72, 14.58, 14.53, 14.46, 14.34, 13.71, 13.64, 13.44, 13.26, 13.06, 13.05, 13.0, 12.6, 11.94, 11.58, 11.36, 10.99, 10.77, 10.76, 10.41, 10.16, 9.98, 9.93, 9.88, 9.76, 9.52, 9.08, 8.96, 8.84, 8.11, 7.55, 7.42, 7.14, 6.81, 6.44, 5.98, 5.73, 5.71, 5.59, 5.4, 4.88, 4.76, 4.76, 4.64, 3.7, 3.18, 2.97, 2.9, 2.84, 2.78, 2.76, 2.38, 2.25, 1.8, 1.68, 1.56, 1.25, 0.07]

target = 112999.99

data.sort(reverse=True)
used = [False] * len(data)

combs = []
for i in range(len(data)):
if used[i]:
continue
sum = 0
comb = []
for k in range(i, len(data)):
if used[k]:
continue
if sum <= target and sum + data[k] > target:
break
comb.append(data[k])
used[k] = True
sum += data[k]
combs.append(comb)

print(combs)

收藏
全部回答1
最新
发布回答
回答