Python上数组中两个最大元素的乘法

2024-10-02 08:26:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着比较两种算法,计算数组中两个最大元素的乘法。我决定实现这样的算法——遍历数组中的每个元素——找到最高的元素,记住它的索引,然后对其余元素重复相同的操作。你知道吗

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)

此函数将最高元素自身相乘。我不明白为什么会这样。你知道吗


Tags: orin算法元素forifrangerandom
3条回答

把你的代码减少到

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。你知道吗

如果您使用的是列表,则可以使用列表方法“max(list)”来查找列表的最高值。下面的代码呢?按照你的逻辑修改

list1 = [1,2,3,4]
list2 = [5,7,3,9]

a, b = max(list1), max(list2)
result = a * b

上面的代码只是一个例子。希望有帮助。你知道吗

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

在第二个循环中,您希望忽略max\u index1元素本身,而不是所有在数值上等于[max\u 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))

但这可能不是最好的学习经历。你知道吗

相关问题 更多 >

    热门问题