首页 > 解决方案 > 人员列表中 2 人或 3 人的所有组合 [Python]

问题描述

我有一个问题。我必须创建没有重复的 2 或 3 人组的所有划分(不是同一划分的 2 次)。例如我有 6 个成员:[a,b,c,d,e,f] 代码应该响应:ab cd ef ab ce df ab cf de abc def ...

我已经有了进行所有组合的代码,但仅适用于 2 组,我不知道如何为 3 组和 2 组执行(例如,如果我们有 5 人,则为 ab cde)

lst =  ['a','b','c','d','e','f']

def all_pairs(lst):
if len(lst) < 2:
    yield []
    return
if len(lst) % 2 == 1:
    # Handle odd length list
    for i in range(len(lst)):
        for result in all_pairs(lst[:i] + lst[i+1:]):
            yield result
else:
    a = lst[0]
    for i in range(1,len(lst)):
        pair = [a,lst[i]]
        for rest in all_pairs(lst[1:i]+lst[i+1:]):
            yield [pair] + rest
print(list(all_pairs(lst)))

标签: pythoncombinations

解决方案


您可以使用 itertools 来执行此操作

import itertools

lst =  ['a','b','c','d','e','f']
for L in range(0, len(lst)+1):
    for subset in itertools.combinations(lst, L):
        if len(subset) == 2 or len(subset) == 3 :
            print(subset)

推荐阅读