问题描述
我应该比较列表中的前一个、实际和下一个值。 下面的这行代码不能完全正常工作。
代码的结果是:
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