gpt4 book ai didi

python - 如何比较列表中的元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:19 26 4
gpt4 key购买 nike

我在算法上遇到了一些问题(找到最大值和最小值),不是算法本身而是实现,让我解释一下:

假设列表是 n = [0,1,1,2,3,5,8,13,-1,99]len(n) = 10然后 globalMin, globalMax = n[0], n[0] #从列表中跳过 1 次迭代

现在我要做的是按“对”进行比较,所以由于我已经使用了 n[0],所以我开始比较 n[1] 和 n[2] 以找到这 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]

但是如果我的最后一个元素只有一个(如上例所示),这将不起作用,因此,正如您猜到的那样,如果最小值或最大值是我列表中的最后一个元素,它将被忽略。我一直在尝试通过索引或列表切片来解决这个问题,但一点运气都没有,有什么建议吗?我必须以“Pythonic”方式执行此操作,并确保在不使用导入的情况下使其尽可能简单和简短。我已经计算出基于下一张图片的算法的其余部分:Image

最佳答案

您可以先检查列表的长度,如果它的长度是奇数,那么您可以将最后一个元素附加到列表的末尾。追加是一个O(1)操作,所以不会影响时间复杂度。

您可以使用 while 循环:

In [78]: lis = [0,1,1,2,3,5,8,13,-1]

In [79]: if len(lis)%2 !=0 : #if the list is of odd length then append the last item to it
lis.append(lis[-1])
....:

In [80]: i=0

In [81]: while i<len(lis)-1:
if lis[i]>lis[i+1]:
local_max,local_min=lis[i],lis[i+1]
elif lis[i]<lis[i+1]:
local_max,local_min=lis[i+1],lis[i]
else:
local_max,local_min=lis[i],lis[i+1]
print local_min,local_max
i+=2
....:
0 1
1 2
3 5
8 13
-1 -1

或者您可以使用迭代器:

In [86]: it=iter(lis)

In [87]: lis = [0,1,1,2,3,5,8,13,-1]

In [88]: if len(lis)%2 !=0 :
lis.append(lis[-1])
....:

In [89]: it=iter(lis)

In [90]: for _ in xrange(len(lis)/2):
....: a,b=next(it),next(it)
....: if a>b:
....: local_max,local_min=a,b
....: elif a<b:
....: local_max,local_min=b,a
....: else:
....: local_max,local_min=a,b
....: print local_min,local_max
....:
0 1
1 2
3 5
8 13
-1 -1

关于python - 如何比较列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15284936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com