Python combinations 函数

Python 常见函数 combinations 详解

✅ 一、概述

Python 中的 combinationsitertools 模块下的一个函数,用于生成序列中所有不重复的 r 个元素的组合(不同于排列 permutation,不考虑顺序)。

模块位置:from itertools import combinations
特点:无重复、无顺序


🧠 二、基本语法

1
2
3
from itertools import combinations

combinations(iterable, r)
  • iterable:可迭代对象,如字符串、列表、元组。
  • r:每组组合中元素的数量。

返回一个迭代器对象(itertools.combinations),其中包含所有的 r 长度组合。


🧪 三、基础用法示例

🎯 示例 1:生成列表的所有 2 元组合

1
2
3
4
5
6
from itertools import combinations

data = ['A', 'B', 'C']
result = list(combinations(data, 2))

print(result) # [('A', 'B'), ('A', 'C'), ('B', 'C')]

🔍 解释:

  • 原始列表:['A', 'B', 'C']
  • 所有可能的 2 个元素组合(不考虑顺序):3 种。
  • 输出的是元组组成的列表。

💼 四、企业实战案例

📌 场景 1:多服务器组合测试(运维/测试场景)

企业中有多台服务器,为了测试高可用搭配,需遍历所有 2 台服务器的组合:

1
2
3
4
5
6
7
8
9
from itertools import combinations

servers = ['192.168.1.1', '192.168.1.2', '192.168.1.3']

# 选择任意两台服务器组合进行双机容灾测试
server_pairs = list(combinations(servers, 2))

for pair in server_pairs:
print(f"Testing redundancy for: {pair}")

结果输出

1
2
3
Testing redundancy for: ('192.168.1.1', '192.168.1.2')
Testing redundancy for: ('192.168.1.1', '192.168.1.3')
Testing redundancy for: ('192.168.1.2', '192.168.1.3')

📌 场景 2:商品搭配推荐系统(电商/算法场景)

在商品推荐中,经常需要生成组合搭配(如套餐)。

1
2
3
4
5
6
7
8
9
from itertools import combinations

products = ['牛排', '红酒', '沙拉', '甜点']

# 生成三件套组合推荐
combos = list(combinations(products, 3))

for combo in combos:
print(f"推荐套餐:{combo}")

✅ 输出:

1
2
3
4
推荐套餐:('牛排', '红酒', '沙拉')
推荐套餐:('牛排', '红酒', '甜点')
推荐套餐:('牛排', '沙拉', '甜点')
推荐套餐:('红酒', '沙拉', '甜点')

🔁 五、与 permutations 的区别

函数名 是否有顺序 是否允许重复元素 示例
combinations ❌ 无顺序 ❌ 不重复 AB 与 BA 视为同一组
permutations ✅ 有顺序 ❌ 不重复 AB 与 BA 为不同组合

📎 六、组合数计算公式(C(n, r))

组合总数计算公式为:


🛠 七、实际业务进阶技巧

✅ 1. 动态组合数据(生成所有组合)

1
2
3
4
5
6
7
8
from itertools import combinations

data = ['A', 'B', 'C', 'D']

# 生成所有可能的组合(1个到len(data)个)
for r in range(1, len(data)+1):
for combo in combinations(data, r):
print(combo)

✅ 2. 数据去重后组合(推荐前先去重)

1
2
3
4
5
data = ['A', 'B', 'A', 'C', 'B']
unique_data = list(set(data))

result = list(combinations(unique_data, 2))
print(result)

⚠️ 八、注意事项

  • 返回的是一个迭代器,需要 list() 转换。
  • 数据中元素不可重复,否则影响结果。
  • 不同于 permutationscombinations 顺序不影响组合
  • 大量组合时建议使用生成器,避免内存消耗。

✅ 九、小练习题

题目:有 5 名员工,需从中任选 3 人组建小组,打印所有可能组合。

1
2
3
4
5
6
7
from itertools import combinations

employees = ['张三', '李四', '王五', '赵六', '钱七']
teams = list(combinations(employees, 3))

for team in teams:
print("组合小组:", team)

📚 十、总结

特性 描述
类型 itertools.combinations
输入 iterable,可迭代对象
输出 所有长度为 r 的组合
是否有顺序 ❌ 无顺序
是否有重复组合 ❌ 无
使用场景 商品推荐、测试组合、统计分析、AI特征组合

Python combinations 函数
https://dreamshao.github.io/2025/07/23/python常见函数之combinations/
作者
Yun Shao
发布于
2025年7月23日
许可协议