在 Python 中循环遍历列表时比较上一个和下一个值

问题描述

我应该比较列表中的前一个、实际和下一个值。 下面的这行代码不能完全正常工作。

代码的结果是:

5 4 6
8 10 11
20 18 19

所以我想念像

这样的值
9 8 10   

和像

这样的值
8 10 11

完全错了。

我在 enumerate 方法中遗漏了什么?

list=[1,2,3,4,5,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)

解决方法

str 转换之后,它保持 "10"

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

您还可以使用带有 1 个偏移量切片的 zip 来简化这种“迭代邻居”模式:

lst = [1,2,3,4,5,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,c)

5 4 6
9 8 10
20 18 19

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...