亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何找到特定范圍內的所有整數集?

如何找到特定范圍內的所有整數集?

慕蓋茨4494581 2023-09-05 15:29:47
我有一個列表列表,我想找到列表中項目的所有排列。我很難解釋這一點,所以這里有一個例子。我有三個清單:level_list = [    [1, 2, 3],    [1, 2],    [1, 2, 3, 4, 5]]我想最終得到一個列表列表,所有列表的長度都是 3,并且包含我原來的 3 個列表中的潛在選項;像這樣:final_list =[    [1, 1, 1],    [1, 1, 2],    [1, 1, 3],    [1, 1, 4],    [1, 1, 5],    [1, 2, 1],    [1, 2, 2],    [1, 2, 3],    [1, 2, 4],    [1, 2, 5],    [2, 1, 1],    [2, 1, 2],    [2, 1, 3],    [2, 1, 4],    [2, 1, 5],    [2, 2, 1],    [2, 2, 2],    [2, 2, 3],    [2, 2, 4],    [2, 2, 5],    [3, 1, 1],    [3, 1, 2],    [3, 1, 3],    [3, 1, 4],    [3, 1, 5],    [3, 2, 1],    [3, 2, 2],    [3, 2, 3],    [3, 2, 4],    [3, 2, 5]]感覺如果我要手動執行此操作,我應該做我會做的事情,即:增加最后一個子列表,將其他兩個常量的值保持為 1增加中間子列表,將第一個子列表的值保持為 1 并繼續改變最終子列表完成第一個子列表如果我對列表的 # 進行硬編碼,我可以使用嵌套的 for 循環來做到這一點,但這感覺非?!胺?python 風格”,而且也不是真正可行,因為我最終需要它成為一個可以與任意數量的子列表一起使用的函數:final_list = []for i1 in level_list[0]:    for i2 in level_list[1]:        for i3 in level_list[2]:            final_list.append([i1, i2, i3])            print(final_list)這幾乎就像我需要一個 for 循環嵌套的 for 循環?;蛘咭恍┍任蚁胂蟮母斆鞯慕鉀Q方案。我也愿意接受只接受最小值和最大值的解決方案——這將始終是整數列表,它們之間的步長為 1。
查看完整描述

2 回答

?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

你可以用itertools.product那個

計算輸入可迭代對象的笛卡爾積。

final_list?=?list(itertools.product(*level_list)))

例子

list(itertools.product(*[[1,?2],?[3,?4]])))?#?[(1,?3),?(1,?4),?(2,?3),?(2,?4)]


查看完整回答
反對 回復 2023-09-05
?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

   level_list = [

            [1, 2, 3],

            [1, 2],

            [1, 2, 3, 4, 5]

        ]


        nb_lists = len(level_list)

        least_significant_position = nb_lists - 1

        indices = defaultdict(int)

        solution_found = False

        solution = list()


        while not solution_found:

            possible_combination = list()

            index_incremented = False


            for i in range(nb_lists, 0, -1):

                current_selection = level_list[i - 1]

                index = indices[i - 1]

                possible_combination.insert(0, current_selection[index])


                max_index_for_this_list = len(current_selection) - 1


                if not index_incremented and index < max_index_for_this_list:

                    indices[i - 1] += 1

                    index_incremented = True


                    if i - 1 != least_significant_position:

                        less_significant_position = i


                        while less_significant_position <= least_significant_position:

                            indices[less_significant_position] = 0

                            less_significant_position += 1


            solution.append(possible_combination)


            if not index_incremented:

                solution_found = True


        print(solution.__str__())


查看完整回答
反對 回復 2023-09-05
  • 2 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號