gpt4 book ai didi

python - 序列中值对(2 项元组)的所有可能组合 - PYTHON 2.7

转载 作者:行者123 更新时间:2023-12-01 05:19:07 25 4
gpt4 key购买 nike

我的数学脑子出了问题,谷歌却没能回答我的困惑。

给定一个包含 2 个项元组的序列或列表(来自 Counter 对象),我如何快速而优雅地让 python 吐出这些元组的所有可能组合的线性序列或数组?我的目标是尝试找到 Counter 对象的结果组合......

为了清楚起见,如果我有这个序列:

[(500, 2), (250, 1)]  

手动执行此示例,应该会产生以下结果:

250, 500, 750, 1000, 1250. 

基本上,我认为 b 的范围是 a*b,然后将结果列表添加在一起......我已经尝试过这个(其中 c=Counter 对象):

res = [[k*(j+1) for j in range(c[k])] for k in c]

它会给我返回:

res = [[250], [500, 1000]]

到目前为止一切顺利,它会遍历每个元组并为每个 y 乘以 x * y...但是结果列表尚未包含所有组合,第一个列表 [250] 需要添加到每个组合第二个列表的元素。我相信任何数量的结果都是如此。

现在我想我需要获取这个结果列表中的每个列表并将其依次添加到其他列表中的其他元素中。我在这件事上做错了吗?我发誓应该有一个更简单的方法。我觉得应该有一种方法可以在单行列表合成中做到这一点。

这个解是递归的吗?是否有我不知道的神奇导入或内置方法?我的头好痛……

最佳答案

我不完全确定我关注了你,但也许你正在寻找类似的东西

from itertools import product

def lincombs(s):
terms, ffs = zip(*s)
factors = product(*(range(f+1) for f in ffs))
outs = (sum(v*f for v,f in zip(terms, ff)) for ff in factors if any(ff))
return outs

这给出了

>>> list(lincombs([(500, 2), (250, 1)]))
[250, 500, 750, 1000, 1250]
>>> list(lincombs([(100, 3), (10, 3)]))
[10, 20, 30, 100, 110, 120, 130, 200, 210, 220, 230, 300, 310, 320, 330]

关于python - 序列中值对(2 项元组)的所有可能组合 - PYTHON 2.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22716883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com