Making Combinations (Python)
在python中,有没有比嵌套for循环或列表理解更好的方法从k元素集中获得n个元素的组合?
例如,假设从集合[1,2,3,4,5,6]中,我想要得到[(1,2),(1,3),(1,4),(1,5),(1,6),(2,3),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6),(4,5),(4,6),(5,6)]。有没有比
1 2 3 4 5 | nums=[1,2,3,4,5,6] doubles=[] for a in nums: for b in nums[a+1:] doubles.append((a,b)) |
?如果我们最终得到的列表中的元素是集合、元组或列表,这没关系;我只是觉得应该有一种更简单的方法来实现这一点。
您可以使用
1 2 3 4 | >>> from itertools import combinations >>> nums = [1,2,3,4,5,6] >>> list(combinations(nums, 2)) [(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 3), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6), (4, 5), (4, 6), (5, 6)] |
号
例子:
1 2 3 4 5 6 7 | >>> import itertools >>> list(itertools.combinations(range(1,7),2)) [(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 3), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6), (4, 5), (4, 6), (5, 6)] >>> list(itertools.combinations_with_replacement(range(1,7),2)) [(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (3, 3), (3, 4), (3, 5), (3, 6), (4, 4), (4, 5), (4, 6), (5, 5), (5, 6), (6, 6)] >>> list(itertools.permutations(range(1,7),2)) [(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), (2, 3), (2, 4), (2, 5), (2, 6), (3, 1), (3, 2), (3, 4), (3, 5), (3, 6), (4, 1), (4, 2), (4, 3), (4, 5), (4, 6), (5, 1), (5, 2), (5, 3), (5, 4), (5, 6), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5)] |
您可以使用itertools模块
1 2 3 4 | import itertools alphabet = ['1','2','3','4','5','6'] combos = list(itertools.combinations(alphabet, 2)) print combos |