2015-10-09 10 views
5

ソートされたリスト内のn個の連続した整数のシーケンスを見つけてそのシーケンスを返したいと思います。これは私が(n = 4のために)把握できる最高値であり、ユーザーがnを指定することを許さない。Pythonのリスト内の整数列の検索/抽出

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] 

私は、このコードは動作しません実現し、「インデックス範囲外」エラーを返しますので、私はのためのループの範囲を台無しにする必要があります。

+0

シーケンスでは1の違いを意味しますか? –

+0

@AnandSKumarはい、上記のコードは簡単に "m"の差を持つ配列を検索するために編集することができます – chiiidog

+0

そしてそのようなシーケンスは1つだけでしょうか? –

答えて

1

短く簡潔な方法は、次の整数が現在の整数に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] 
1

は(my_sorted_list通過し、マスターの最後のリストのいずれかに各項目を追加し、ネストされたマスター結果リストを作成します。不連続な場合)、またはマスターの新しいリスト(もしあればntinuous):ここで

>>> 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] 
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 [] 
3

はストレートなソリューションです。それはそれほど効率的ではありませんが、非常に長いリストを持たないとうまくいくでしょう:

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 
関連する問題