用python列表初始化

时间:2016-06-16 17:48:42

标签: 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]



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 ofcourse在我的情况下将[9]作为起始值。

我只是想问是否有任何pythonic方法来解决这个问题>解释python只是从[0]的0开始初始化并传递[9]作为第一个值。

由于

1 个答案:

答案 0 :(得分: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