小编Tru*_*son的帖子

如何在 Python 中生成一组 n 个对象的所有唯一嵌套二元组(嵌套配对)?

对于嵌套二元组,我的意思是这样的:((a,b),(c,(d,e)))所有元组都有两个元素。我不需要元素的不同顺序,只需要在它们周围放置括号的不同方式。对于items = [a, b, c, d],有 5 个独特的配对,它们是:

(((a,b),c),d)  
((a,(b,c)),d)  
(a,((b,c),d))  
(a,(b,(c,d)))  
((a,b),(c,d))
Run Code Online (Sandbox Code Playgroud)

在完美的世界中,我还想控制返回元组的最大深度,这样如果我生成 的所有配对items = [a, b, c, d]max_depth=2它只会返回((a,b),(c,d))

出现这个问题是因为我想找到一种方法来生成非交换、非关联数的加法结果。如果a+b不等于b+a,且不a+(b+c)等于(a+b)+c,a、b、c 的所有可能和是多少?

我创建了一个生成所有配对的函数,但它也返回重复项。

import itertools

def all_pairings(items):
    if len(items) == 2:
        yield (*items,)
    else:
        for i, pair in enumerate(itertools.pairwise(items)):
            for pairing in all_pairings(items[:i] + [pair] + items[i+2:]):
                yield pairing
Run Code Online (Sandbox Code Playgroud)

例如,它返回((a,b),(c,d))两次 for ,因为它在一种情况下将第一个配对,在第二种情况下将第一个items=[a, b, c, d]配对。(a,b)(c,d)

对于大量项目来说,返回重复项成为一个越来越大的问题。根据加泰罗尼亚数字 …

python algorithm combinations combinatorics

2
推荐指数
2
解决办法
103
查看次数

标签 统计

algorithm ×1

combinations ×1

combinatorics ×1

python ×1