我想在排序列表中找到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循环的范围。
答案 0 :(得分:4)
这是一个直截了当的解决方案。它没有那么高效,但除非你有很长的名单,否则它会很好:
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 :(得分: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 = []
运行代码时,newarr将是:
[1, 2, 3, 4]
答案 2 :(得分:2)
创建一个嵌套的主结果列表,然后浏览my_sorted_list
并将每个项目添加到主文件中的最后一个列表(如果不连续)或主文件中的新列表(如果连续):
>>> my_sorted_list = [0,2,5,7,8,9]
>>> my_sequences = []
>>> for idx,item in enumerate(my_sorted_list):
... if not idx or item-1 != my_sequences[-1][-1]:
... my_sequences.append([item])
... else:
... my_sequences[-1].append(item)
...
>>> max(my_sequences, key=len)
[7, 8, 9]
答案 3 :(得分:0)
#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 []