我们如何测试列表中是否包含n个相差1的连续数字?

时间:2018-09-08 19:32:21

标签: python

给出一个正整数列表,我们如何测试列表中是否包含相差1的 n 个连续数字并返回结果?

例如:

  • 测试以下列表 [10、19、5、6、7、8、2、7、10、12] ,其中 n = 4 将返回 [5、6、7、8] ,因为此列表中有一部分包含四个相差1的连续整数。

  • 使用 n = 5 测试以下列表 [5,2,12,10,11,12,14,95] strong>会返回 False ,因为此列表中没有节包含五个相差1的连续整数。

  • 最后,让我们用 测试以下列表 [8,10,50,10,11,12,8,9,40,41,42] n = 3 将返回 [[10,11,12],[40,41,42]] ,因为我们在同一列表中有两个部分,其中包含三个连续的部分差异为1的整数。

1 个答案:

答案 0 :(得分:0)

尝试reducing您的列表。

from functools import reduce


def get_all_consecutives(iterable, consecutive_limit):
    consecutives = []

    def consecutive_reducer(accumulator, next_item):
        if not accumulator:
            accumulator.append(next_item)
        else:
            if next_item - accumulator[-1] == 1:
                accumulator.append(next_item)
            else:
                accumulator = [next_item]

        if len(accumulator) == consecutive_limit:
            consecutives.append(accumulator)

        return accumulator

    reduce(consecutive_reducer, iterable, [])

    if not consecutives:
        return False
    elif len(consecutives) == 1:
        return consecutives[0]
    else:
        return consecutives


iterable = [10, 19, 5, 6, 7, 8, 2, 7, 10, 12]
consecutives = get_all_consecutives(iterable, 4)
print(consecutives)  # [5, 6, 7, 8]

iterable = [5, 2, 12, 10, 11, 12, 14, 95]
consecutives = get_all_consecutives(iterable, 5)
print(consecutives)  # False

iterable = [8, 10, 50, 10, 11, 12, 8, 9, 40, 41, 42]
consecutives = get_all_consecutives(iterable, 3)
print(consecutives)  # [[10, 11, 12], [40, 41, 42]]