2017-02-21 12 views
2

私たちは、私は、各項目の前に0の数をカウントして、上記のリストについては、例えば3リスト内の要素の前に特定の要素を数えるには?

def formula(n): 
    for x in list: 
     if x == 1: 
      form = n * 3 
      return form 
#If x is 1, count the number of zeros right before x and multiply this by 3, 

ことで、この数を掛けるだろう機能を見つけることを試みているリスト

list = [1, 1, 1, 0, 1, 0, 0, 1] 

を持っています最初の要素は1であり、その直前に番号がない場合、プログラムは0 * 3 = 0を計算する必要があります。2番目の項目は1です。また、直前の数値もゼロではありません。プログラムまた、0 * 3 = 0を計算しなければなりません。4番目の要素は0なので、プログラムは無視しなければなりません。5番目の要素が1の場合、その直前の番号a 0、1 * 3 = 3を計算するプログラム、6番目の要素の直前の数が1の場合、システムは0 * 3 = 0を計算します。xが1に等しくないため、プログラムは何もしてはいけません。 1である最後の要素については、最後の二つの数字、それがゼロになる前に、プログラムが計算しなければならない2 * 3 = 6

+0

なぜ7番目の要素をスキップしましたか? –

+0

Uriel Eldの回答は発電機を使用していますが、sparkandshineはリストを使用していますが、より快適に感じられるものを使用してください。 – Adirio

+0

修正をありがとうございますMoses –

答えて

1

def formula(l): 
    count_zero = 0 
    result = [] 

    for i in l: 
     if i == 1: 
      result.append(3*count_zero) 
      count_zero = 0 
     elif i == 0: 
      count_zero += 1 

    return result 

# Test case 
l = [1, 1, 1, 0, 1, 0, 0, 1] 
result = formula(l) 
print(result) 
# [0, 0, 0, 3, 6] 
+0

あなたの回答を編集して結果をリストに追加します。 – Adirio

+0

@Adirio、そうしました。 – SparkAndShine

+0

こんにちは、私はresults.appendの部分の数式を調整しようとしています。問題が発生しています:result.append(max(3 + count_zero)、0)、 :TypeError: 'int'オブジェクトは反復可能ではありません。どうすれば修正できますか、ありがとうございます。 –

3

は、私はあなたが発電機を探していると信じて、これを試してみてください、簡単なカウンターで:

def get_values (list): 
    n = 0 
    for x in list: 
     if x == 1: 
      yield n * 3 
      n = 0 # reset the counter 
     elif x == 0: 
      n += 1 # increment the counter 

print(list(get_values([1, 1, 1, 0, 1, 0, 0, 1]))) 
# [0, 0, 0, 3, 6] 
1

これは私の問題解決の解決方法です。

test_list = [1, 1, 1, 0, 1, 0, 0, 1] 


def formula(list): 
    track = [] 
    start = 0 

    for i,n in enumerate(list): 
     count_list_chunk = list[start:i] 
     if count_list_chunk.count(0) > 0 and n != 0: 
      start = i 

     if n != 0: 
      track.append(count_list_chunk.count(0)*3) 

    return track 

print formula(test_list) 
#[ 0, 0, 0, 3, 6] 
関連する問題