如何使用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来说速度会很慢