Python – 列表中最小數對和


最小數對和的定義是從給定數字列表中取出的兩個數字的最小可能和。當最小化兩個元素的總和很重要時,例如減少某個操作所需的成本、距離或時間,它可以用來解決挑戰。在Python中,我們有一些內建函式,如float()、sort()、combination()和range(),將用於查詢列表中的最小數對和。

語法

以下語法用於示例中:

float('inf')

float()是Python中的內建方法,它接受引數來設定較大的無窮大值。

sort()

sort()是Python中的內建方法,它預設按升序對數字進行排序。

combinations()

這是Python中的內建方法,它遵循Python的itertools模組,該模組收集元素列表的順序,但順序無關緊要。它有助於設定對的可能性。

len()

len()是Python中的內建方法,它返回物件的長度。

使用巢狀for迴圈

該程式使用遞迴函式,其中迴圈迭代遍歷列表以查詢最小數對和。

示例

在以下示例中,程式從名為min_pair的函式開始,該函式接受引數nums以接收輸入列表的值。在這個函式中,初始化兩個變數min_summin_pair。min_sum使用float('inf')初始化為正無窮大,min_pair初始化為空元組。接下來,兩個巢狀迴圈迭代列表中的所有整數對。然後使用if語句,如果數對和小於min_sum,則根據新的數對和調整min_sum,並修改min_pair以表示當前的數字對。檢查完所有配對後,函式將返回最小和和最小數對。接下來在變數num中建立輸入列表整數。然後在兩個變數r_sumres_pair中使用函式呼叫。最後,我們使用相同的變數作為print函式的引數來獲取結果。

def min_pair(nums):
    min_sum = float('inf')
    min_pair = ()
    for i in range(len(nums)):
        for j in range(i + 1, len(nums)):
            pair_sum = nums[i] + nums[j]
            if pair_sum < min_sum:
                min_sum = pair_sum
                min_pair = (nums[i], nums[j])
    return min_sum, min_pair

# create the list
num = [40, 21, 91, 50, 11]
r_sum, res_pair = min_pair(num)
print("Minimum pair sum of the list:", r_sum)
print("Pair is:", res_pair)

輸出

Minimum pair sum of the list: 32
Pair is: (21, 11)

使用排序

該程式使用sort()函式並將sum應用於列表索引元素,這將有助於查詢最小數對和。

示例

在以下示例中,程式從min_pair開始,它將數字列表作為引數。在函式中,使用內建函式sort對數字列表進行排序。將排序列表的前兩個元素相加以確定最小和。將排序列表的前兩個元素轉換為元組以提供最小數對。函式返回最小數對和最小和。接下來,建立列表並將其儲存在變數num中。然後在變數r_sumr_pair中呼叫名為min_pair的函式。接下來在print函式中使用相同的變數來獲取結果。

def min_pair(nums):
    nums.sort()
    min_sum = nums[0] + nums[1]
    min_pair = (nums[0], nums[1])
    return min_sum, min_pair
# create the list  
num = [11, 10, 9, 5, 1]
r_sum, res_pair = min_pair(num)
print("Minimum pair sum from the list:", r_sum)
print("Pair is:", res_pair)

輸出

Minimum pair sum from the list: 6
Pair is: (1, 5)

使用sum()和tuple()

該程式使用sum()來新增列表中的最小數對,並使用內建方法tuple將其結果設定為元組形式的最小數對。

示例

在以下示例中,程式從名為min_pair_sum的函式開始,該函式接受引數nums以接收來自變數num(透過函式呼叫)的列表值。在這個函式中,列表按升序排序。透過將前兩個元素新增到排序列表中,將計算最小和。排序列表的前兩個元素已轉換為元組以提供最小數對。然後函式返回最小數對和最小和。接下來,將輸入列表儲存在變數num中。然後在名為min_pair_sum的函式呼叫中接受變數num並將其儲存在變數r_sumres_pair中。最後,我們列印最小數對和最小和的結果。

def min_pair_sum(nums):
    sorted_nums = sorted(nums)
    min_sum = sum(sorted_nums[:2])
    min_pair = tuple(sorted_nums[:2])
    return min_sum, min_pair
# Create the List
num = [10, 11, 12, 13, 14]
r_sum, res_pair = min_pair_sum(num)
print("Minimum pair sum:", r_sum)
print("Pair:", res_pair)

輸出

Minimum pair sum: 21
Pair: (10, 11)

使用itertools.combination

此程式使用itertools模組中的combinations()函式從給定列表生成所有可能的數字對。然後它找到和最小的對,並返回其和及其對。

示例

在下面的例子中,使用itertools模組的combinations函式,find_min_pair_sum函式從給定的列表生成所有可能的數字配對。然後它迭代所有配對以找到具有最小和的配對,並返回最小和和最小配對。然後呼叫函式以列表的形式傳遞數字並輸出結果。

from itertools import combinations
def find_min_pair_sum(nums):
    pairs = combinations(nums, 2)
    min_sum = float('inf')
    min_pair = ()
    for pair in pairs:
        pair_sum = sum(pair)
        if pair_sum < min_sum:
            min_sum = pair_sum
            min_pair = pair
    return min_sum, min_pair
# Create the list
numbers = [4, 2, 9, 5, 1]
result_sum, result_pair = find_min_pair_sum(numbers)
print("Minimum pair sum:", result_sum)
print("Pair:", result_pair)

輸出

 Minimum pair sum: 3
Pair: (2, 1)

結論

我們討論瞭解決問題陳述的各種方法。在列表中查詢最小的數對和對於各種應用程式至關重要,例如成本最佳化、距離計算以及解決問題和資料處理工作中的時間效率分析。

更新於:2023年8月14日

427 次檢視

開啟您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.