Subscribe:

2012/11/01

連続した数値の最小値と最大値を抽出

例えば[1,2,3,5,6,8]とかのリストがあって
連続する数値は最小と最大を連続しない数値はその数値のみ
[[1,3],[5,6],[8]]のリストを作りたい時のメモ
# -*- coding: utf-8 -*-

def main(arr):
    # リストの最大値を取得し連続値ループ内で連続部分のリストを作成
    c=0
    m=[]
    for i in range(1,arr[-1]+1):
      if i==arr[c]:
          c+=1
          m.append(0)
      else:
          m.append(1)
    # m=>[0, 0, 0, 1, 0, 0, 1, 0]0 の部分が連続部分
    # 0=>1が開始部分で1=>0が終了部分なのでループ判定する
    # 配列の最初と最後は別処理
    c=1
    s=0
    ql=[]
    for i in m:
      if c==1 and i==0:# 配列の最初のみ処理
          s=1 # スタートに設定
      if c>=2 and c<=len(m):
          if i==0 and m[c-2]==1:
              s=c
      if c==len(m):# 配列の最後のみ処理
          ql.append(list_append(s,c))
      else:
          if i==0 and m[c]==1:# 終了条件
              ql.append(list_append(s,c))
      c+=1
    return ql

def list_append(s,e):
  L=[]
  if s==e:
      L.append(s)
  else:
      L.append(s)
      L.append(e)
  return L

if __name__ == '__main__':
  arr = [1,2,3,5,6,8]
  print main(arr)

0 件のコメント: