首页 > 解决方案 > 如何从满足Python中某些条件的列表中获取所有对

问题描述

我正在尝试生成一个带有替换的有序(0.1, 0.1)对列表(即需要和) (0.1, 0.2)(0.2, 0.1)它们满足它们的总和<= max_sum在 Python 中的条件。例如,给定max_sum=1和列表:

[0, 0.1, 0.2, ..., 0.9, 1.0]

我想生成一个列表,其中包含:

[(0, 0), (0, 0.1), ..., (0, 0.9), (0, 1.0), (0.1, 0), (0.1, 0.1), ..., (0.1, 0.8), (0.1, 0.9), (0.2, 0), (0.2, 0.1), ...]

不是 (0.1, 1.0)

这是一个可能效率低下且丑陋的解决方案,它存在一些问题,即 if 语句有时无法正确解析:

alphas = [0., .1, .2, .3, .4, .5, .6, .7, .8, .9, 1.]
max_sum = 1
def get_pairs(alphas, max_sum)
    for a in alphas:
        for b in alphas:
            if a + b <= max_sum:
                yield (a, b)

标签: pythonlist

解决方案


如果订单很重要,这意味着您将拥有两者(0, 0.2)(0.2,0)例如,那么您可以试试这个:

L = [round(x*0.1, 2) for x in range(0, 10)]
print([(x,y) for x in L for y in L if x + y <= 1])

输出 :

[(0.0, 0.0), (0.0, 0.1), (0.0, 0.2), ... (0.8, 0.2), (0.9, 0.0), (0.9, 0.1)]

推荐阅读