擅长:python、mysql、java
<p>你有两个问题,其中一个很微妙。首先,必须将max\u index1和max\u index2的初始值设定项从循环中移出,否则它们在循环的每一步都被设置为-1,而不是保留到目前为止找到的最大元素的值。你知道吗</p>
<p>在第二个循环中,您希望忽略max\u index1元素本身,而不是所有在数值上等于[max\u index1]的元素。所以需要修改if语句的第一项。(例如,如果您的列表“b”是[9,9,8],则您将得到错误的答案)。你知道吗</p>
<pre><code>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)
</code></pre>
<p>真正优雅的Pythonic解决方案是导入标准模块heapq,然后用一行代码替换列表“b”创建下面的所有代码:</p>
<pre><code>print(sum(heapq.nlargest(2,b))
</code></pre>
<p>但这可能不是最好的学习经历。你知道吗</p>