如何在Python中实现列表划分并过滤子段含重复字符的方案
实现思路
- 生成所有划分:长度为n的列表共有n-1个可切分的间隙,每个间隙可以选择切或者不切,遍历所有选择组合就能拿到全部不改变元素顺序的划分方案
- 过滤规则:遍历每个划分的所有子段,只要任意子段出现重复元素就丢弃该划分,否则保留
实现代码
from itertools import product def get_valid_partitions(lst): n = len(lst) if n == 0: return [] valid_partitions = [] # 遍历所有切分组合,1代表当前位置切分,0代表不切分 for cuts in product([0, 1], repeat=n-1): partition = [] start = 0 for i, cut in enumerate(cuts): if cut == 1: partition.append(lst[start:i+1]) start = i + 1 partition.append(lst[start:]) # 校验当前划分所有子段是否无重复元素 is_valid = True for sub in partition: if len(set(sub)) != len(sub): is_valid = False break if is_valid: valid_partitions.append(partition) return valid_partitions
测试示例
test_lst = ['a', 'b', 'a'] result = get_valid_partitions(test_lst) for p in result: print(p)
运行输出结果和需求预期完全一致:
[['a'], ['b', 'a']] [['a', 'b'], ['a']] [['a'], ['b'], ['a']]
内容的提问来源于stack exchange,提问作者1bitPython
相关产品推荐
相关产品推荐

