2016-11-30 7 views
0

この問題で私を助けてくれませんか?私はこのリスト内の要素をスキップする

a = [1,2,3,0,0,0,3,4,5] 

ような配列を持っていると私は出力が

a = [1,2,3,0,0,0,4,5,6] 

または

a = [1,2,3,0,3,4,5] -> a = [1,2,3,0,4,5,6]だから、私は重複を検出し、リスト内の数を増やす方法を知りになりたいです。しかし、私の問題は、どのように私は0を検出し、リストを介して自分の反復でそれをスキップすることができますか?すべてのヘルプは大歓迎です(私たちは2.7を使用しているためのPython 2.7が理想的である)

私の方法は、これまで

i = 1 
while i < len(a): 
    if a[i-1] == a[i]: 
     a[i] = a[i]+1 
i = i+1 

あると、

a = [1,2,3,3,4,5]はお時間をいただき、ありがとうございます場合は、明らかにそれだけで動作します。

+0

何を試しましたか? – Akavall

+3

あなたはアルゴリズムに関する十分な情報を提供していません。あなたは '0'に基づいて増分しますか? '[1,2,0,3,4]'は '[1,2,0,4,5]'になるか、重複する '3 '(' 0'は無視する)のためにインクリメントしますか? '[1,2,3,3,4]'は '[1,2,3,4,5]'になります。そしてあなたはあなたのところで何の試みもしていない。 – AChampion

+0

いいえ、それで十分です。以来、私は[1,2,3,0,4,5]または[1,2,3,0,0,4,5]のケースしか持っていません。そして、それは私の環境の中の「いつも」そうです。 – Alexander

答えて

2
  • 要素が既に
  • 特殊なケースを使用されているかどうかをテストするために、補助セットを定義する:0、パススルー
  • は、元のリストをスキャンし、AUX 1の増加までではないが、
  • を設定する場合
  • が出力リスト

(副作用がありますので、ここではありませんリスト内包)

01に追加セットに新しい値を追加

私の提案:

a = [1,2,3,0,0,0,3,4,5] 
b = [] 
s = set() 

for i in a: 
    if i: 
     while i in s: 
      i+=1 
     s.add(i) 
    b.append(i) 

注:データに応じて、setはやり過ぎかもしれません。あなただけのデータ部分は、(ゼロを除く)増加した場合は1つのメモリスロットは十分なはずです:

(それは iを増加させないので、ちょうど最高値+ 1を取る速いです)
a = [1,2,3,0,0,0,3,4,5] 
b = [] 

highest = 0 
for i in a: 
    if i!=0: 
     if i <= highest: 
      i=highest+1 
     highest = i 
    b.append(i) 

+0

それが動作します。私はリストを使って反復を使用し、a [i-1]とa [i]を比較し、a [i] = a [i] +1と設定しました。その方法で重複は検出されますが、スキップしません。ヘルプありがとうございます。 – Alexander

+0

リスト部分がゼロ以外の昇順でソートされている場合は、最後の非ゼロ要素を記憶することで簡単にすることができます( 'set'の必要はありません) –

関連する問題