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

chi*_*dog 7 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(range(my_list[i],my_list[i]+4))

my_sequence = [2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

我刚刚意识到这段代码不起作用并返回"索引超出范围"错误,因此我将不得不弄乱for循环的范围.

sau*_*atz 5

这是一个简单的解决方案。它的效率并不高,但除非你有很长的列表,否则它会很好:

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
Run Code Online (Sandbox Code Playgroud)


Pat*_* Yu 2

一种简短而简洁的方法是,每次发现下一个整数是当前整数加 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 = []
Run Code Online (Sandbox Code Playgroud)

当代码运行时,newarr 将是:

[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)