Python純程式碼 取組合數結果

小鱼圆又圆發表於2024-09-01

總是在程式設計題目上碰到取列表中若干元素組合結果的情況,想出過解法但是老是忘,趁現在還記得趕緊寫下來

大致思路是:透過迭代遍歷每個元素位置,選擇可能的位置,用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}個結果')

相關文章