python - 查找列表中的第一个元素,其中所有后续值都递增一个
问题描述
我想在列表中找到该值,之后所有其他值仅增加 1。
# Input
my_list1 = [2, 5, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
my_list2 = [6, 7, 9, 11, 12, 14, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28]
my_list3 = [5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25]
# Output
my_list1 = 15
my_list2 = 20
my_list3 = 18
我正在考虑在列表中向后循环,当减少量大于 1 时,提取该位置的值。
for x in reversed(my_list1):
if x decrease > 1:
print(x)
解决方案
这是一个itertools
基于的,如果我们有一个很长的列表很有用,所以我们没有将它加载到内存中。这里dropwhile
将在条件成立时从可迭代对象中删除值,我们只需要next
在结果可迭代对象中获取元素。请注意,它next
有一个默认参数,我们可以将其设置None
为避免StopIteration
引发错误:
from itertools import tee, dropwhile
def first_diff(it):
i, j = tee(reversed(it), 2)
next(j)
return next((dropwhile(lambda e: e==(next(j)+1), i)), None)
first_diff(my_list1)
# 15
first_diff(my_list2)
# 20
first_diff(my_list3)
# 18
推荐阅读
- ios - Dispatch Semaphore 会无意中死锁吗?
- shadow-dom - shadowRoot.getSelection()?
- python - 我无法显示评论数
- java - 为什么我的 do-while 循环在使用 Java Scanner 输入无效输入后变成无限循环?
- reactjs - 文档 Firebase React 上的 onSnapshot
- c++ - 使用中继器时不显示 Qml 按钮列表
- python - 如何通过python脚本将信息从mysql数据库发送到ios应用程序
- flutter - Flutter Stream 每次应用启动时仅工作一次
- reactjs - Material UI Switch 自定义类 react
- php - 警告:mysqli_num_rows() 需要参数 1