2017-02-21 109 views
2

我們有一個列表如何計算列表中元素之前的特定元素?

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

我試圖找到將統計每個項目之前的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, 

這個數字乘以例如,對於上面的列表功能,第一個元素是1,並且在它之前沒有數字,程序應該計算0 * 3 = 0,對於第二個元素,它也是1,在它也不是零之前的數字,程序也應該計算0 * 3 = 0.第四個元素是0,所以程序應該忽略,對於第五個元素是1,它之前的數字是一個0,計算1 * 3 = 3的程序,對於第6個元素,其右邊的數字是1之前,系統應該計算0 * 3 = 0.第7個元素是0,因爲x不等於1該程序不應該做任何事情。對於這是1的最後一個元素,最後兩個數字前都爲零,程序應該計算2 * 3 = 6

+0

爲什麼你跳過第7個元素? –

+0

Uriel Eld的答案使用了一個發電機,而sparkandshine使用了一個列表,使用一個你感覺更舒適的發電機,雖然 – Adirio

+0

謝謝你的糾正摩西 –

回答

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] 
相關問題