小工具知识网

当前位置: 首页 > 行业知识 > python从长度为n的列表中任取k个数

行业知识

python从长度为n的列表中任取k个数

2026-11-13 06:11:52 来源:互联网转载

法一(内置函数法):

使index.php/tags-41973.html" >���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 itertoolsn,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 33 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)

上一篇:动态口令技术大揭秘,安全验证的新潮流

下一篇:轻松下载辅助工具,一站式教程助你轻松搞定!