<p>我不知道你的代码为什么不起作用,但我想我可以尝试一下自己的版本。可以稍微清理一下,但似乎对您的两个示例有效</p>
<pre><code>def nextGreaterElement(nums1, nums2):
results = []
for i in range(len(nums1)):
greater_numbers = nums2[i:][np.where(nums2[i:] > nums1[i])]
if len(greater_numbers) > 0:
results += [greater_numbers[0]]
else:
results += [-1]
return np.array(results)
list1 = np.array([4, 1, 2])
list2 = np.array([1, 3, 4, 2])
nextGreater = nextGreaterElement(list1, list2)
print(nextGreater)
</code></pre>
<p>下面是代码的工作原理:</p>
<p>首先,我们需要遍历第一个列表中的数字:</p>
<pre><code>for i in range(len(nums1)):
</code></pre>
<p>然后,我们希望在与第一个点相同的索引处对第二个列表进行切片。我将使用nums1作为[4,1,2]和nums2作为[1,3,4,2]来执行此示例,查看nums1中的“1”</p>
<pre><code>nums2[i:]
(value 1 is at index 1, nums2[1:] returns array([3, 4, 2]))
</code></pre>
<p>查找切片列表中大于我们正在查看的数字的数字的位置</p>
<pre><code>np.where(nums2[i:] > nums1[i])
(at i=1, this returns the index positions (array([0, 1, 2], dtype=int64),) as all of the numbers in [3,4,2] are greater than 1)
</code></pre>
<p>然后索引nums2列表以返回实际值</p>
<pre><code>greater_numbers = nums2[i:][np.where(nums2[i:] > nums1[i])]
returns array([3, 4, 2])
</code></pre>
<p>在获取列表中的第一个数字之前,我们需要检查数组中是否有任何值</p>
<pre><code>if len(greater_numbers) > 0:
results += [greater_numbers[0]]
else:
results += [-1]
</code></pre>
<p>将结果作为numpy数组返回以保持一致性。我最初将结果附加到列表中,因为它们是可变的。我不确定这方面的最佳做法是什么,但这是我的做法</p>
<pre><code>return np.array(results)
</code></pre>