<p>好的,首先,为了消除代码中的一些错误,一个有效的例子是:</p>
<pre><code>def findMin(alist):
overallmin=alist[0]
for i in alist:
issmallest=True
for j in alist:
if i>j:
issmallest=False
if issmallest:
overallmin = i
return overallmin
</code></pre>
<p>此代码的思想是将列表中的所有元素与所有其他元素进行比较,并保留比所有其他元素小的元素。因此,在循环中,假设当前元素是最小的<code>issmallest = True</code>,直到找到一个较小的元素。如果找到一个较小的值,issmallest的值将更改为False。因此,如果在与所有其他元素比较之后,issmallest仍然是真的,那么元素确实是最小的,因此是固定不变的。你知道吗</p>
<p>您可以简化此代码,因为一旦找到最小的元素,就无需进一步比较,即您可以离开函数。在这个算法中,不需要为最小的元素保留一个变量。相应的代码可能如下所示:</p>
<pre><code>def findMin(alist):
for current_el in alist:
issmallest = True
for other_el in alist:
if other_el < current_el:
issmallest = False
if issmallest:
return current_el
</code></pre>
<p><strong>但是:</strong>即使对于初学者来说,这也不是一个很好的寻找最小值的代码。作为一个初学者,我可以这么说。在一个元素在手的情况下浏览一次列表,在浏览的同时进行比较,并始终保持最小值,这样会更干净。
因此,即使在低成本的情况下,您也可以编写这样一个更快的算法:</p>
<pre><code>def findMin(alist):
smallest_el = alist.pop() # take out an element, no need to compare with itself
for other_el in alist:
if other_el < smallest_el:
smallest_el = other_el
return smallest_el
</code></pre>