2016-06-16 4 views
1

У меня есть проблема с правильной инициализации в спискеинициализации со списком питона

import random 

a = [random.randint(0,1) for x in range(10)] # getting random 0 and 1 

b = a[:] # copying 'a' list for purpose of analysis 

for x,y in enumerate(b): # adding + 1 where value is 1 
    if y != 0: 
     b[x] += b[x-1] 



print(a) # > [1, 0, 0, 1, 1, 1, 0, 0, 1, 1] 
print(b) # > [2, 0, 0, 1, 2, 3, 0, 0, 1, 2] 
# wanted # > [1, 0, 0, 1, 2, 3, 0, 0, 1, 2] 

от а [1:] все в порядке. Python выполняет правильную инициализацию, однако если [0] == 1 и [9] == 1, Python of the course принимает значение [9] в качестве стартового значения в моем случае.

Я просто спрашиваю, есть ли какой-нибудь pythonic способ решить это> объяснение python, чтобы начать инициализацию от 0 до [0] и передачи [9] в качестве первого значения.

Благодаря

+0

я не уверен точно, что вы просите. Ваш код выводит результат, который я ожидаю, и я думаю, что он соответствует вашему объяснению того, что вы хотите. Не могли бы вы уточнить, что именно не так, и предоставить то, что вы ожидаете от вывода? – wnnmaw

+0

Проверьте код еще раз. Я добавил желаемый результат. – filtertips

+4

Измените условие if на '' if y! = 0 и x! = 0' – hashcode55

ответ

2

Вы можете пропустить первое значение довольно легко:

for x,y in enumerate(b[1:]): # adding + 1 where value is 1 
    if y != 0: 
     b[x + 1] += b[x] 

b[1:] просто пропускает первое значение из списка для перечисления. Таким образом, первое число не тронуто. Но поскольку индексы в x теперь все слишком низки, мы должны добавить один в обоих случаях, превратив x в x + 1 и x - 1 в x. Таким образом, мы получаем доступ к правильному индексу.

Использование списка тест, он произвел следующий вывод:

[1, 0, 0, 1, 1, 1, 0, 0, 1, 1] # original list 
[1, 0, 0, 1, 2, 3, 0, 0, 1, 2] # processed list 
Смежные вопросы