Python纯代码 取组合数结果

总是在编程题目上碰到取列表中若干元素组合结果的情况,想出过解法但是老是忘,趁现在还记得赶紧写下来

 

大致思路是:通过迭代遍历每个元素位置,选择可能的位置,用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}个结果')

 

posted @ 2024-09-01 18:46  小鱼圆又圆  阅读(14)  评论(0编辑  收藏  举报