首页 > 解决方案 > 在 Python 中循环遍历列表时比较上一个值和下一个值

问题描述

我应该比较列表中的前一个值、实际值和下一个值。下面的这行代码并不完全有效。

代码的结果是:

5 4 6
8 10 11
20 18 19

所以我想念像

9 8 10   

和价值观

8 10 11

完全错了。

我在enumerate方法中缺少什么?

list=[1,2,3,4,5,4,6,7,9,8,10,11,14,15,16,20,18,19]

for i,n in enumerate (list):

    if (i + 1 < len( list ) and i - 1 >= 0):

        a = str( list[i - 1] )
        b = str( n )
        c = str( list[i + 1] )

        if a>b<c:
            print (a,b,c)

标签: pythonpython-3.xloopscomparisonenumerate

解决方案


转换后str,它认为 "10" < "8" 因为字符串是按字典顺序比较的。所以你可以简单地省略那些:

a = list[i - 1]
b = n 
c = list[i + 1]

您还可以使用zip1-offset 切片来简化这种“迭代邻居”模式:

lst = [1,2,3,4,5,4,6,7,9,8,10,11,14,15,16,20,18,19]  # don't shadow built-in `list`
for a, b, c in zip(lst, lst[1:], lst[2:]):
    if a > b < c:
        print(a,b,c)

5 4 6
9 8 10
20 18 19

推荐阅读