python - 在 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)
解决方案
转换后str
,它认为 "10" < "8" 因为字符串是按字典顺序比较的。所以你可以简单地省略那些:
a = list[i - 1]
b = n
c = list[i + 1]
您还可以使用zip
1-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
推荐阅读
- angular - 在 ANGULAR 中发布数组参数的正确方法是什么?
- javascript - appendChild 到旁边或右边
- android - PackageManager 没有返回带有 targetSdkVersion 30 的正确包
- python - 如何使用 Python 将 CSV 文件转换为 XML 格式
- javascript - D3.js 是否可以使用嵌套数据在每个点上绘制圆圈?
- javascript - 我的 JSON 输出仅打印 [object] 而不是值
- java - 如何在 Tomcat 8 中将多个展开的 webapps($CATALINA_BASE/webapps 之外)设置为 ROOT?
- python - Cannot get the emulator running for my Android App using beeware (newbie)
- java - Writing a program to check password for certain things
- python - Python: How to: attribute of an instance which depends on flag, which is itself an attribute of that instance / object