每个人,
a =[0, 0, 2, 4, 6]
x=5
这是一个列表(a
)和一个修正值(x
)。
我需要一个循环代码,它必须在列表的每个元素中添加x,并在每个循环中将此值与先前的列表元素相加(循环必须作为x值继续)。其他的结果应该如下:
0
0
2
4
6
0
0
7
9
11
0
0
12
14
16
0
0
15
19
21
0
0
21
24
26
我准备了如下代码,但它不起作用。其他的话产生如下(不正确的)
i=0
counter=0
while counter < x:
for i in a:
if i >0:
i=i+x
elif i ==0:
i=0
print i
counter=counter+1
0 0 7 9 11 0 0 7 9 11 0 0 7 9 11 0 0 7 9 11 0 0 7 9 11
所以,我需要为此提供帮助...... 谢谢。
答案 0 :(得分:2)
我认为这主要是你想要的(至少,正如我理解的那样)......
def make_it_so(a, x):
i = 0
counter=0
while counter < x:
for i in a:
if i == 0:
yield 0
else:
yield i + counter * x
counter = counter + 1
# Demo
for item in make_it_so([0, 0, 2, 4, 6], 5):
print item
请注意,我已将其设为生成器功能。您可以轻松将其转换为常规函数,如果您在函数顶部创建了一个输出列表,并在yield ...
交换output_list.append(...)
,然后在return output_list
交换0
,则返回列表。功能...
这里的关键是要理解在第一个循环中,您将x
添加到所有(非零)项目。在第二个循环中,您要添加x + x
。在第三个循环中,您要添加x
(因为添加了第一个循环x
,现在您要添加(N-1) * x
更多)。通常,对于第N个循环,您将向所有非零项添加N
。因此,您只需要跟踪N-1
,(或counter
)。事实上,您的原始代码已经在执行此操作(使用relatedTarget
),因此我们只是重新设计它并且一切都很好。
答案 1 :(得分:0)
您需要更改a
中的值,而不仅仅是添加a
中的数字(因为您将继续使用相同的数字)。此外,您需要打印出原始值。
答案 2 :(得分:0)
def process(x, memo):
return [n+x if n else n for n in memo]
res = a
memo = a
for _ in range(x - 1):
memo = process(x, memo)
res.extend(memo)