Python中如何生成字符串列表的无序不重复两两组合?
生成无重复无序两两组合的简洁方案
直接用itertools.combinations就能完美解决你的需求,这个方法专门用于生成无序、无重复元素的指定长度组合,完全匹配你要的结果。
代码实现
import itertools my_list = ['a', 'b', 'c', 'd'] # 生成长度为2的组合,再转成列表的列表(原结果是元组迭代器) combinations = [list(pair) for pair in itertools.combinations(my_list, 2)] print(combinations)
运行后输出就是目标结果:
[['a', 'b'], ['a', 'c'], ['a', 'd'], ['b', 'c'], ['b', 'd'], ['c', 'd']]
为什么你之前的方法不行?
itertools.permutations:生成的是有序排列,会包含('a','b')和('b','a')这类重复的无序组合,不符合要求。itertools.product:生成的是笛卡尔积,会包含('a','a')这种重复元素的组合,同时存在大量有序重复项,需要额外过滤,效率低。zip(list*4):这种方式会把列表重复4次后按位置配对,得到的是('a','a','a','a')这类完全不符合需求的结果,逻辑上就不对。
手动实现方案(不用itertools)
如果不想依赖库,也可以用双重循环手动生成:
my_list = ['a', 'b', 'c', 'd'] combinations = [] for i in range(len(my_list)): for j in range(i+1, len(my_list)): combinations.append([my_list[i], my_list[j]]) print(combinations)
这个逻辑是让每个元素只和它后面的元素配对,自然不会出现重复元素或无序重复的组合。
内容的提问来源于stack exchange,提问作者a-joyce
相关产品推荐
相关产品推荐

