用于添加列表元素但没有高内存性能的循环?

时间:2016-06-06 19:52:00

标签: python list loops while-loop

每个人,

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

所以,我需要为此提供帮助...... 谢谢。

3 个答案:

答案 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)