2017-02-21 15 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, поэтому программа должна игнорировать. Для 5-го элемента, который равен 1, число прямо перед тем, как оно a 0, программа для вычисления 1 * 3 = 3, для 6-го элемента число справа до того, как оно равно 1, система должна вычислить 0 * 3 = 0. 7-й элемент равен 0, так как x не равно 1 программа не должна ничего делать. Для последнего элемента, который является 1, последние две цифры до того, как нули, то программа должна вычислить 2 * 3 = 6

+0

Почему вы пропустили 7-й элемент? –

+0

Ответ Уриэля Элда использует генератор, в то время как sparkandshine использует список, используйте тот, с которым вы чувствуете себя более комфортно, генераторы довольно pythonic, хотя – 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

Привет, Я пытаюсь настроить формулу со стороны результатов.append, и у меня возникают проблемы: result.append (max (3 + count_zero), 0), когда я добавляю max к формуле, я получаю результат, говорящий : 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] 
Смежные вопросы