我遇到一些麻烦的算法(如要查找最大值和最小值)比较元素,而不是算法本身,而是实现,让我解释一下:如何在列表
比方说,清单n = [0,1,1,2,3,5,8,13,-1,99]
; len(n) = 10
然后globalMin, globalMax = n[0], n[0]
q若要跳过1次迭代从列表
现在我要做的是通过“对”比较,所以,因为我已经使用N [0]我开始比较N [1]和n [2 ]找到这两个值之间的最大值和最小值,然后将其与y全局最小值,最大值,然后n [3]和n [4]进行比较,并将nm与我的全局值进行比较,然后n [5]和n [6] ..直到我必须比较n [9]和n [10],因为你可以看到n [10]在我的列表中不存在。我以为我可以使用下面的代码与清单切片解决这个问题:
for i in range(1, len(n), 2):
if n[i:i+1] > n[i+1:i+2]:
minl, maxl = n[i+1:i+2], n[i:i+1] # minl = local min; maxl = local max
else:
maxl, minl = n[i+1:i+2], n[i:i+1]
但是这不会工作,如果我的最后一个元素只有一个(如上面的例子),因此,你可以猜测,如果min或max是我列表中的最后一个元素,它将被忽略。我一直在试图解决这个索引或列表切片,但没有运气,有什么建议吗?我必须以'Pythonic'的方式做到这一点,并确保尽可能简单和简短,而不使用进口。我已经计算出基于下一个图像的算法的其余部分:Image
我会假设你正在做这个教育exersize,但值得注意的是,在任何真实情况下,这最好用'min(n),max(n)'来实现。 – 2013-03-08 01:05:07
是的,它仅用于教育目的,这就是为什么我被要求不要使用任何外部库或函数,它只能与基本语句(如,,,elif,for等) – 2013-03-08 01:07:26
'min()'和'max()'是内置函数,而不是* external *,但我明白你的意思。值得注意的是,通过索引进行迭代效率低,不灵活,难于阅读并且容易失败,应该避免。 – 2013-03-08 01:09:30