首页 > 解决方案 > 查找列表中的第一个元素,其中所有后续值都递增一个

问题描述

我想在列表中找到该值,之后所有其他值仅增加 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)

标签: pythonlist

解决方案


这是一个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

推荐阅读