使用python列表初始化

使用python列表初始化,python,python-3.x,initialization,Python,Python 3.x,Initialization,列表中的正确初始化有问题 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] p

列表中的正确初始化有问题

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]
从a[1:]开始,一切正常。Python确实进行了正确的初始化,但在我的例子中,若[0]==1和[9]==1,Python当然会将[9]作为起始值

我只是问是否有任何python方法可以解决这个问题>解释python只是从0开始初始化[0],并将[9]作为第一个值传递


谢谢

您可以非常轻松地跳过第一个值:

b[1://code>只跳过枚举列表中的第一个值。这样第一个数字就不会被碰。但是因为
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

我不确定你到底在问什么。您的代码生成了我期望的输出,我认为它符合您对所需内容的解释。您能否澄清到底是什么错误,并提供您期望的输出结果?请再次检查代码。我添加了想要的结果。将if条件更改为-
if y=0和x=0
:D非常好的解决方案谢谢。我喜欢hashcode55的解决方案。问题是
b[0-1]
引用了列表中的最后一项,可能是1。
[1, 0, 0, 1, 1, 1, 0, 0, 1, 1]  # original list
[1, 0, 0, 1, 2, 3, 0, 0, 1, 2]  # processed list