Python 查找给定数字的2个数字的所有可能组合/分区

Python 查找给定数字的2个数字的所有可能组合/分区,python,python-2.7,Python,Python 2.7,我在网上找到了这个代码() 我希望它只提供: [[5, 5], [4, 6], [3, 7], [2, 8], [1, 9]] 你可以用 只是为了好玩,无需使用itertools即可理解列表 num = 10 [[x, y] for x in range(1, num) for y in range(1, num) if x + y == num and x <= y] # [[1, 9], [2, 8], [3, 7], [4, 6], [5, 5]] num=10 [[x,y]对

我在网上找到了这个代码()

我希望它只提供:

[[5, 5], [4, 6], [3, 7], [2, 8], [1, 9]]
你可以用


只是为了好玩,无需使用
itertools
即可理解列表

num = 10
[[x, y] for x in range(1, num) for y in range(1, num) if x + y == num and x <= y]

# [[1, 9], [2, 8], [3, 7], [4, 6], [5, 5]]
num=10

[[x,y]对于范围(1,num)中的x,对于范围(1,num)中的y,如果x+y==num和x,因为您只需要长度为2的分区(以及每个分区元素的乘积),我们可以使用更简单的方法:

#! /usr/bin/env python

''' Find pairs of positive integers that sum to n, and their product '''

def part_prod(n):
    parts = [(i, n-i) for i in xrange(1, 1 + n//2)]
    print parts    
    print '\n'.join(["%d * %d = %d" % (u, v, u*v) for u,v in parts])


def main():    
    n = 10
    part_prod(n)

if __name__ == '__main__':
    main()
输出

[(1, 9), (2, 8), (3, 7), (4, 6), (5, 5)]
1 * 9 = 9
2 * 8 = 16
3 * 7 = 21
4 * 6 = 24
5 * 5 = 25

这个很好用!它甚至比上一个工作得更快:)你知道我如何把它变成一个东西,我可以把列表的每一部分分成2,然后再乘以它们吗?我需要这个,这比我想象的要难。你能给我一个例子,说明你把它分成两组是什么意思吗?我用这个来做一个分解p多项式计算器,取第一个数“和”,然后乘以两个求和的数得到“和”,如果得到第二个数,则得到“积”。例如,^2+339a+26660,而+339是“和”,26660是“积”当我把124和215相加时,我得到339,当我把它们相乘时,我得到26660。感谢组合逻辑是一个糟糕的算法。这是对帕德雷克·坎宁安答案的改进,但我仍然不喜欢。你能详细说明一下吗?见PM 2Ring的答案。哦,是的,同意,简单多了。
num = 10
[[x, y] for x in range(1, num) for y in range(1, num) if x + y == num and x <= y]

# [[1, 9], [2, 8], [3, 7], [4, 6], [5, 5]]
#! /usr/bin/env python

''' Find pairs of positive integers that sum to n, and their product '''

def part_prod(n):
    parts = [(i, n-i) for i in xrange(1, 1 + n//2)]
    print parts    
    print '\n'.join(["%d * %d = %d" % (u, v, u*v) for u,v in parts])


def main():    
    n = 10
    part_prod(n)

if __name__ == '__main__':
    main()
[(1, 9), (2, 8), (3, 7), (4, 6), (5, 5)]
1 * 9 = 9
2 * 8 = 16
3 * 7 = 21
4 * 6 = 24
5 * 5 = 25