如何使用Python查找具有特定总和的列表中的特定数字

如何使用Python查找具有特定总和的列表中的特定数字,python,Python,我有一个数字列表: [40.5, 19.04, 31.72, 68.16, 45.68, 45.68, 532.74, 137.52, 401.58, 25.92, 185.90, 1037.96, 23.41, 829.50, 98.35, 57.12, 620.87, 21, 435.08, 460.85, 1079.16, 1386.29, 272.82, 131.44, 135.51, 39, 1079.16, 230.63, 1297.44, 301.27, 372.57,173.17

我有一个数字列表:

[40.5, 19.04, 31.72, 68.16, 45.68, 45.68, 532.74, 137.52, 401.58, 25.92, 185.90, 1037.96, 23.41, 829.50, 98.35, 57.12, 620.87, 21, 435.08, 460.85, 1079.16, 1386.29, 272.82, 131.44, 135.51, 39, 1079.16, 230.63, 1297.44, 301.27, 372.57,173.17, 191.84, 213.92, 423.9, 56.24, 189.98, 14.76]
我在列表中有一些特定数字的总和,我如何得到这些数字和已知总和的总和

例如,如果已知总和为59.04,如何计算40.5和19.04


干杯

使用此项查找和对

def findPair(A, sum):
    for i in range(len(A) - 1):# consider each element except last element
        for j in range(i + 1, len(A)):# start from i'th element till last element
            if A[i] + A[j] == sum:# if desired sum is found, print it and return
                print("Pair found at index", i, "and", j)
                print("Sum Pair:", A[i], A[j])
                return
    print("Pair not found")# No pair with given sum exists in the list
 
 
A = [40.5, 19.04, 31.72, 68.16, 45.68, 45.68, 532.74, 137.52, 401.58, 25.92, 185.90, 1037.96, 23.41, 829.50, 98.35, 57.12, 620.87, 21, 435.08, 460.85, 1079.16, 1386.29, 272.82, 131.44, 135.51, 39, 1079.16, 230.63, 1297.44, 301.27, 372.57,173.17, 191.84, 213.92, 423.9, 56.24, 189.98, 14.76]

findPair(A, 59.54)
sum = 99.88
findPair(A, sum)
输出:

Pair found at index 0 and 1
Sum Pair: 40.5 19.04
Pair found at index 2 and 3
Sum Pair: 31.72 68.16
参考:

N个数字的总和:

import itertools
def findlist(A, summ):
    for i in range(len(A)):
        for j in itertools.combinations(A, i):
            res = round(sum(list(j)), 2) 
            if res == summ:
                print("Sum Combinations", j )
A = [40.5, 19.04, 31.72, 68.16, 45.68]
findlist(A, 91.26)

注意:对于大型列表,这将较慢使用它来查找和对

def findPair(A, sum):
    for i in range(len(A) - 1):# consider each element except last element
        for j in range(i + 1, len(A)):# start from i'th element till last element
            if A[i] + A[j] == sum:# if desired sum is found, print it and return
                print("Pair found at index", i, "and", j)
                print("Sum Pair:", A[i], A[j])
                return
    print("Pair not found")# No pair with given sum exists in the list
 
 
A = [40.5, 19.04, 31.72, 68.16, 45.68, 45.68, 532.74, 137.52, 401.58, 25.92, 185.90, 1037.96, 23.41, 829.50, 98.35, 57.12, 620.87, 21, 435.08, 460.85, 1079.16, 1386.29, 272.82, 131.44, 135.51, 39, 1079.16, 230.63, 1297.44, 301.27, 372.57,173.17, 191.84, 213.92, 423.9, 56.24, 189.98, 14.76]

findPair(A, 59.54)
sum = 99.88
findPair(A, sum)
is_sum = lambda seq, x: any(x == y + z for yi, y in enumerate(seq) for zi, z in enumerate(seq) if zi != yi)
输出:

Pair found at index 0 and 1
Sum Pair: 40.5 19.04
Pair found at index 2 and 3
Sum Pair: 31.72 68.16
参考:

N个数字的总和:

import itertools
def findlist(A, summ):
    for i in range(len(A)):
        for j in itertools.combinations(A, i):
            res = round(sum(list(j)), 2) 
            if res == summ:
                print("Sum Combinations", j )
A = [40.5, 19.04, 31.72, 68.16, 45.68]
findlist(A, 91.26)
注意:对于大型列表,这将较慢

is_sum = lambda seq, x: any(x == y + z for yi, y in enumerate(seq) for zi, z in enumerate(seq) if zi != yi)
只要使用itertools

import itertools
listofnumbers = [40.5, 19.04, 31.72, 68.16, 45.68, 45.68, 532.74, 137.52, 401.58, 25.92, 185.90, 1037.96, 23.41, 829.50, 98.35, 57.12, 620.87, 21, 435.08, 460.85, 1079.16, 1386.29, 272.82, 131.44, 135.51, 39, 1079.16, 230.63, 1297.44, 301.27, 372.57,173.17, 191.84, 213.92, 423.9, 56.24, 189.98, 14.76]
target = 59.54
for numbers in itertools.combinations(listofnumbers,2):
    if round(sum(numbers),2) == target:
        print(numbers)
指定2个数字,您的输出将为

(40.5, 19.04)
只要使用itertools

import itertools
listofnumbers = [40.5, 19.04, 31.72, 68.16, 45.68, 45.68, 532.74, 137.52, 401.58, 25.92, 185.90, 1037.96, 23.41, 829.50, 98.35, 57.12, 620.87, 21, 435.08, 460.85, 1079.16, 1386.29, 272.82, 131.44, 135.51, 39, 1079.16, 230.63, 1297.44, 301.27, 372.57,173.17, 191.84, 213.92, 423.9, 56.24, 189.98, 14.76]
target = 59.54
for numbers in itertools.combinations(listofnumbers,2):
    if round(sum(numbers),2) == target:
        print(numbers)
指定2个数字,您的输出将为

(40.5, 19.04)

它总是两个数字的和吗?当你说数字x是一些数字的和时,请你也记下你的尝试。它保证是2个数的和还是n个数的和?例如,70应该是30和40的和,还是可以是20+20+20+5+3+2?这个和值总是可能的吗?@Chris是的!当你说数字x是一些数字的和时,你能不能也记下你的尝试。它保证是2个数的和还是n个数的和?例如,70应该是30和40的和,还是可以是20+20+20+5+3+2?这个和值总是可能的吗?@Chris是的!如果在问题中被问到,总和可以是n个数字,而不仅仅是2个数字。为n个数字添加了代码,但对于大型列表@HarshAs来说速度会很慢。在问题中,总和可以是n个数字,而不仅仅是2个数字。为n个数字添加了代码,但对于大型列表@Harsh来说速度会很慢