法一(内置函数法):
使用itertools.combinations函数从5个数中任选三个数。itertools.combinations函数返回给定可迭代对象中元素的所有可能组合,无重复且元素顺序不同则视为不同的组合。
import itertools  
# 定义你的数字列表  
numbers = [1, 2, 3, 4, 5]  
# 使用itertools.combinations选择三个数的所有组合  
combinations = list(itertools.combinations(numbers, 3))  
# 打印结果  
for combo in combinations:  print(combo)在此基础上进行推广到从n个数中任选k个数:
import itertools
n,k=map(int,input().split())x=input().split(" ")
number=[]
for i in range(n):number.append(int(x[i]))cmb=list(itertools.combinations(number,k)) #返回一个迭代器,以元组为元素
for c in cmb:print(c)
'''
入:
4 3
3 7 12 19 31
出:
(3, 7, 12)
(3, 7, 19)
(3, 12, 19)
(7, 12, 19)
'''法二(数据大用递归,数据小用暴力枚举):
还是以5选3为例,循环嵌套的层数取决于选的个数
# 定义包含5个数的列表  
numbers = [1, 2, 3, 4, 5]  # 初始化一个空列表来存储所有组合  
combinations = []  # 外层循环选择第一个数  
for i in range(len(numbers)):  # 内层第一个循环选择第二个数,注意要跳过已经选过的数  for j in range(i + 1, len(numbers)):  # 内层第二个循环选择第三个数,同样要跳过之前选过的数  for k in range(j + 1, len(numbers)):  # 将选出的三个数作为元组添加到组合列表中  combinations.append((numbers[i], numbers[j], numbers[k]))  # 打印所有组合  
for combo in combinations:  print(combo)def combinations_with_loops(numbers, k):  # 初始化一个空列表来存储所有组合  combinations = []  # 获取列表长度  n = len(numbers)  # 使用递归函数来生成组合  def generate_combinations(start, current_combination):  # 如果当前组合的长度等于k,则将其添加到结果列表中  if len(current_combination) == k:  combinations.append(tuple(current_combination))  return  # 遍历从start开始到列表末尾的所有元素  for i in range(start, n):  # 将当前元素添加到组合中,并递归调用以继续添加下一个元素  generate_combinations(i + 1, current_combination + [numbers[i]])  # 从第一个元素开始生成组合  generate_combinations(0, [])  # 返回所有组合  return combinations  # 示例  
numbers = [1, 2, 3, 4, 5]  
k = 3  # 使用循环生成组合  
combinations = combinations_with_loops(numbers, k)  # 打印所有组合  
for combo in combinations:  print(combo)法三(深度优先搜索DFS):
从N个数选取k个数的组合--不降原则(DFS)_n个数中选k个不同组合数-CSDN博客
P1036 [NOIP2002 普及组] 选数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)