找到通过对列表中的每个整数求和获得的最小和

时间:2019-08-09 10:14:02

标签: python

我正在学习python,并且正在训练自己进行不同的练习。对于其中之一,我必须从列表中找到两个数字的乘积的最小和。为此,我想创建一个列表并按顺序对其进行排序,并创建第二个列表,在该列表中我将以相反的顺序对其进行排序,然后将每个列表的第一个元素的乘积求和并将它们加在一起。

这是一个小例子:

list[5, 4, 2, 3]

list_sorted = [2, 3]
list_sorted_rev = [5, 4]

expectation = 22

calcul made: 5 * 2 + 3 * 4

但是我有一个问题,当我在循环中执行此操作时,我的循环将使用第一个列表的第一个值遍历第二个列表,然后再转到第一个列表的第二个值。

这是我完成的代码。

def min_sum(arr):
    my_list = []
    my_rev = []
    srt = sorted(arr)
    rev = sorted(arr, reverse=True)
    rng = len(arr) / 2
    res = 0

    for i in range(0, int(rng)):
        my_list.append(srt[i])
        my_rev.append(rev[i])
    for i in my_rev:
        for j in my_list:
            res += i * j
    print(res)

2 个答案:

答案 0 :(得分:2)

不是使用嵌套的for循环:

for i in my_rev:
        for j in my_list:
            res += i * j

您必须同时遍历两个列表。可以使用zip(*iterables)

for i, j in zip(my_rev, my_list):
            res += i * j

答案 1 :(得分:2)

这是因为您使用的是一个嵌套循环,使它在第一个列表上多次迭代。您可以改用以下代码:

def min_sum(arr):
   my_list = []
   my_rev = []
   srt = sorted(arr)
   rev = sorted(arr, reverse=True)
   rng = len(arr) / 2
   res = 0

   for i in range(0, int(rng)):
       my_list.append(srt[i])
       my_rev.append(rev[i])

   for ind in range(len(my_rev)):
       res += my_rev[ind] * my_list[ind]

   print(res)

min_sum([5, 4, 2, 3])
相关问题