总是在编程题目上碰到取列表中若干元素组合结果的情况,想出过解法但是老是忘,趁现在还记得赶紧写下来
大致思路是:通过迭代遍历每个元素位置,选择可能的位置,用yield生成并返回。
def get_c(list1, num_left=None, list2=None): """ :param list1: 待取组合数列表 :param num_left: 待取元素数量 :param list2: (储存已取元素列表) """ list2 = list2 or [] num_left = num_left or len(list1) for index in range(len(list1)-num_left+1): cur_list = list2+[list1[index]] if num_left > 1: list_left = list1[index+1:] yield from get_c(list_left, num_left-1, cur_list) else: yield cur_list if __name__ == '__main__': # 测试:从5个元素的列表[1~5]中获取所有的3元素组合,共5x2=10个结果 test_data = [1, 2, 3, 4, 5] count = 0 for i in get_c(test_data, 3): print(i) count += 1 print(f'总共{count}个结果')
标签:__,组合,Python,list,代码,list1,list2,num,left From: https://www.cnblogs.com/roundfish/p/18391582