在python中查找/提取列表中的整数序列

在python中查找/提取列表中的整数序列,python,Python,我想在一个排序列表中找到一个由n个连续整数组成的序列,并返回该序列。这是我能想到的最好的方法(对于n=4),它不允许用户指定n my_list = [2,3,4,5,7,9] for i in range(len(my_list)): if my_list[i+1] == my_list[i]+1 and my_list[i+2] == my_list[i]+2 and my_list[i+3] == my_list[i]+3: my_sequence = list(ra

我想在一个排序列表中找到一个由n个连续整数组成的序列,并返回该序列。这是我能想到的最好的方法(对于n=4),它不允许用户指定n

my_list = [2,3,4,5,7,9]
for i in range(len(my_list)):
    if my_list[i+1] == my_list[i]+1 and my_list[i+2] == my_list[i]+2 and my_list[i+3] == my_list[i]+3:
        my_sequence = list(range(my_list[i],my_list[i]+4))

my_sequence = [2,3,4,5]

我刚刚意识到这段代码不起作用,并返回了一个“索引超出范围”错误,因此我将不得不处理for循环的范围。

一个简短的方法是,每当您发现下一个整数是当前整数加1(直到您在数组中已经有N个连续的数字)时,用数字填充一个数组,我们可以清空阵列:

arr = [4,3,1,2,3,4,5,7,5,3,2,4]
N = 4
newarr = []

for i in range(len(arr)-1):
    if(arr[i]+1 == arr[i+1]):
        newarr += [arr[i]]
        if(len(newarr) == N):
            break
    else:
        newarr = []
运行代码时,newarr将:

[1, 2, 3, 4]

创建一个嵌套的主结果列表,然后浏览
my_sorted_list
,将每个项目添加到主结果列表中的最后一个列表(如果不连续)或主结果列表中的新列表(如果连续):

#size=序列长度
#span=相邻整数的跨度
#时间复杂度为O(n)
def extractSeq(lst,尺寸,范围=1):
lst_尺寸=长度(lst)
如果lst_尺寸<尺寸:
返回[]
对于范围内的i(lst_尺寸-尺寸+1):
对于范围内的j(尺寸-1):
如果lst[i+j]+span==lst[i+j+1]:
持续
其他:
i+=j
打破
其他:
返回lst[i:i+大小]
返回[]

这里有一个简单的解决方案。它可能没有那么有效,但除非您有很长的列表:

myarray = [2,5,1,7,3,8,1,2,3,4,5,7,4,9,1,2,3,5]
for idx, a in enumerate(myarray):
    if myarray[idx:idx+4] == [a,a+1,a+2,a+3]:
        print([a, a+1,a+2,a+3])
        break

您所说的序列是指差值为1吗?@AnandSKumar是的,尽管上述代码可以轻松编辑以搜索差值为“m”的序列,并且只有一个这样的序列?@AnandSKumar是正确的,您事先知道这个差值吗?我的意思是,你会给出手动搜索的差异吗?或者让程序尝试找出差异,如果是后者,如果列表中有多个序列,有多个差异怎么办?
#size = length of sequence
#span = the span of neighbour integers
#the time complexity is O(n) 
def extractSeq(lst,size,span=1):
    lst_size = len(lst)
    if lst_size < size:
        return []
    for i in range(lst_size - size + 1):
        for j in range(size - 1):
            if lst[i + j] + span == lst[i + j + 1]:
                continue
            else:
                i += j
                break
        else:
            return lst[i:i+size]
    return []
myarray = [2,5,1,7,3,8,1,2,3,4,5,7,4,9,1,2,3,5]
for idx, a in enumerate(myarray):
    if myarray[idx:idx+4] == [a,a+1,a+2,a+3]:
        print([a, a+1,a+2,a+3])
        break