【问题标题】:Multiplication of two biggest elements of the array on PythonPython上数组的两个最大元素的乘法
【发布时间】:2016-03-28 04:31:46
【问题描述】:

我正在尝试比较两种算法,计算数组中两个最大元素的乘法。我决定为此实现这样的算法 - 遍历数组的每个元素 - 找到最高的一个,记住它的索引,然后对其余元素重复相同的操作。

import random


m = 2
n = random.randint(0+m,10+m)
b = [random.randint(0,12) for _ in range(n)]

def MaxPairwiseProductFast(a):
    for i in range(0,n):
        max_index1 = -1
        if (max_index1 == -1) or (a[i] > a[max_index1]):
            max_index1 = i

    for j in range(0,n):
        max_index2 = -1
        if (a[j] != a[max_index1]) and ((max_index2 == -1) or (a[j] > a[max_index2])):
            max_index2 = j

    resutl = a[max_index1]*a[max_index2]

    print(resutl)


MaxPairwiseProductFast(b)

此函数将最高元素乘以自身。我不知道为什么会这样。

【问题讨论】:

  • (max_index2 == -1)有什么用???我的意思是为什么首先使用它?它相当混乱。

标签: python arrays python-3.x


【解决方案1】:

如何将您的代码缩减为

import random

m = 2
n = random.randint(0 + m, 10 + m)
b = [random.randint(0, 12) for _ in range(n)]

if len(b) >= 2:
    b.sort(reverse=True)

    n1 = b[0]
    n2 = b[1]

    result = n1 * n2

    print('List:   {0}'.format(b))
    print('Result: {0}'.format(result))

它会发出(在我的机器上,在执行时,但可能不同):

List:   [11, 7, 7, 6, 6, 6, 5, 4, 4, 2, 0]
Result: 77

您可以看到列表中两个最高的数字是 11、7,所以它们的乘积是 77。

【讨论】:

    【解决方案2】:

    你有两个问题,其中一个是微妙的。首先,您必须将 max_index1 和 max_index2 的初始值设定项移出循环,否则它们在循环的每一步都被设置为 -1,而不是保留目前找到的最大元素的值。

    在第二个循环中,您希望忽略 max_index1 元素本身,而不是所有数值等于 a[max_index1] 的元素。所以需要修改if语句的第一项。 (例如,如果您的列表 'b' 是 [9,9,8],否则您将得到错误的答案)。

    import random
    
    m = 2
    n = random.randint(0 + m, 10 + m)
    b = [random.randint(0, 12) for _ in range(n)]
    print(b)
    
    def MaxPairwiseProductFast(a):
        max_index1 = -1
        for i in range(0,n):
            if (max_index1 == -1) or (a[i] > a[max_index1]):
                max_index1 = i
    
        max_index2 = -1
        for j in range(0,n):
            if (j != max_index1) and ((max_index2 == -1) or (a[j] > a[max_index2])):
                max_index2 = j
    
        resutl = a[max_index1]*a[max_index2]
    
        print(resutl)
    
    MaxPairwiseProductFast(b)
    

    真正优雅的 Pythonic 解决方案是导入标准模块 heapq,然后将创建列表“b”下面的所有代码替换为一行:

    print(sum(heapq.nlargest(2,b))
    

    但这可能不是最好的学习体验。

    【讨论】:

      【解决方案3】:

      如果您使用列表,则可以使用列表方法“max(list)”来查找列表的最大值。下面的代码怎么样?根据你的逻辑修改

      list1 = [1,2,3,4]
      list2 = [5,7,3,9]
      
      a, b = max(list1), max(list2)
      result = a * b
      

      上面的代码只是一个例子。希望对您有所帮助。

      【讨论】:

      • 这将第一个列表中的最大元素乘以第二个列表中的最大元素,这比将单个列表中的两个最大元素相乘更容易。
      猜你喜欢
      • 2017-03-01
      • 2017-02-02
      • 2016-12-12
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 2012-07-25
      相关资源
      最近更新 更多