python - 成对拆分列表和唯一元素

标签 python set partition

我很难尝试实现以下目标: 我有一个列表(比如 [a,b,c,d]),我需要以各种可能的方式将它分成对和唯一元素(顺序不重要),即:

[a,b,c,d], [(a,b), c,d], [(a,b), (c,d)], [a, (b,c), d], [(a,d), (b, c)]...

等等。 This thread解决了仅使用对时的问题,但我还需要独特的元素,但我无法做到这一点。 任何想法将不胜感激。 谢谢!

最佳答案

也许更简单的解决方案是递归解决方案。 只需使用第一个元素创建每个组合,然后在没有它的情况下移动到子列表。

def partition(L):
    if len(L) <= 1:
        return [L]

    partitions = [[L[0]] + p for p in partition(L[1:])]
    for i in xrange(1, len(L)):
        partitions.extend([[(L[0], L[i])] + p for p in partition(L[1:i]+L[i+1:])])

    return partitions

关于python - 成对拆分列表和唯一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30007067/

相关文章:

python - Scrapy 跟随与正则表达式匹配的链接

python - 如何在Python中使用请求库将 key 发送到网页?

python - 是否有一种快速算法可以将集合的所有分区生成为大小为 2 的子集(以及一个大小为 1 的子集)?

python - 我的 Python Set() 中的某些元素最终变成了十六进制

linux - EC2 Linux 实例中未知的 414 GB 设备/分区/卷

python - 如何修复 os.path.join(os.getcwd(), os.relpath ('my_file' )) 不返回 'my_file' 的路径?

python - TypeError : join() argument must be str or bytes, 不是 'PosixPath'

javascript - 将对象数组中两个属性的唯一值存储到单个数组中

distributed - 如果我们对一个 C+A 分布式系统进行分区会怎样?

testing - Im textbox From 1 to 1000 write testcase to allow only multiple of 5 使用等效分区和边界值分析?