给出一个正整数列表,我们如何测试列表中是否包含相差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的整数。
答案 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]]