Python将iterables分解为组合

2024-06-25 23:25:38 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个可数'ABCD',我想得到所有(1,3)对,例如:

('A', 'BCD'),
('B', 'ACD'),
('C', 'ABD'),
('D', 'ABC')

我发现了itertools.combination,但是,它只能给出['BCD', 'ACD', 'ABD', 'ABC'],不包括1部分。你知道吗

在python中有没有一种简单的方法可以做到这一点?你知道吗


Tags: 方法abcitertoolsabcdcombinationacdabdbcd
2条回答

最简单的方法是使用集合差异来识别被生成的组合排除的零件:

>>> from itertools import combinations
>>> population = set('ABCD')
>>> for group in combinations(population, 3):
        remainder = population.difference(group)
        result = ''.join(remainder), ''.join(group)
        print(result)

('D', 'ACB')
('B', 'ACD')
('C', 'ABD')
('A', 'CBD')

这种技术适用于分区,而不仅仅是(1, 3)。例如,以下是(2, 3)分区:

>>> population = set('ABCDE')
>>> for group in combinations(population, 3):
    remainder = population.difference(group)
    result = ''.join(remainder), ''.join(group)
    print(result)


('ED', 'ACB')
('BD', 'ACE')
('BE', 'ACD')
('CD', 'ABE')
('CE', 'ABD')
('CB', 'AED')
('AD', 'CBE')
('AE', 'CBD')
('AB', 'CED')
('AC', 'BED')

怎么样:

x = 'ABCD'
[(x[i], x[:i] + x[i+1:]) for i in range(len(x))]
# Outputs:
# [('A', 'BCD'), ('B', 'ACD'), ('C', 'ABD'), ('D', 'ABC')]

相关问题 更多 >