在下面的代码中,如果输出序列大于3个值,我就得不到结果. 下面的代码不返回任何内容,有没有办法让下面的代码返回7175.90、14259.90、11625.47和3764.81的正确答案?

import itertools
from decimal import Decimal

# Original list of numbers (including decimals)
numbers = [7175.90, 14259.90, 11625.47, 3764.81, 1995.27, 542.23, 2038.32, 4048.83, 490.40, 1279.00, 3248.90]

# Convert the original numbers to Decimal format
#numbers = [Decimal(num) for num in original_numbers]

target_sum = 36826.08
# Generate all combinations of the numbers
result = [seq for i in range(len(numbers), 0, -1) for seq in itertools.combinations(numbers, i) if sum(seq) == target_sum]

print(result)

推荐答案

使用math.isclose-您使用的浮点运算不是精确的:

import itertools
import math

# Original list of numbers (including decimals)
numbers = [
    7175.90,
    14259.90,
    11625.47,
    3764.81,
    1995.27,
    542.23,
    2038.32,
    4048.83,
    490.40,
    1279.00,
    3248.90,
]

target_sum = 36826.08

# Generate all combinations of the numbers
result = [
    seq
    for i in range(len(numbers), 0, -1)
    for seq in itertools.combinations(numbers, i)
    if math.isclose(sum(seq), target_sum)
]

print(result)

打印:

[(7175.9, 14259.9, 11625.47, 3764.81)]

Python相关问答推荐

对某些列的总数进行民意调查,但不单独列出每列

Pandas 滚动最接近的价值

删除最后一个pip安装的包

如何从具有不同len的列表字典中创建摘要表?

Pandas 都是(),但有一个门槛

Python库:可选地支持numpy类型,而不依赖于numpy

Telethon加入私有频道

如何在Python脚本中附加一个Google tab(已经打开)

梯度下降:简化要素集的运行时间比原始要素集长

什么是最好的方法来切割一个相框到一个面具的第一个实例?

为什么在FastAPI中创建与数据库的连接时需要使用生成器?

查看pandas字符列是否在字符串列中

Tensorflow tokenizer问题.num_words到底做了什么?

如何在GEKKO中使用复共轭物

删除特定列后的所有列

为什么我只用exec()函数运行了一次文件,而Python却运行了两次?

BeatuifulSoup从欧洲志愿者服务中获取数据和解析:一个从EU-Site收集机会的小铲子

多索引数据帧到标准索引DF

PyTorch变压器编码器中的填充掩码问题

保存由PYTHON在EXCEL中所做更改的问题