我在列表中正确初始化时遇到问题
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]作为第一个值。
由于
答案 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