2013-10-23 59 views
2

我正在做一些练习题,并且一个程序要求将列表中的数字更改为99,前提是前面的数字是偶数。我遇到了麻烦,当我将数字改为99时,当它移动到下一个数字时,它会检查99是否是偶数,我不想要,我希望它检查原始数值I在那里,而不是我改变它。在不更改原始值的情况下更改列表项目

d = [9, 8, 2, 15, 6, 33, 10, 4] 
i = 1 
while i < len(d) - 1 : 
    if d[i-1]%2 == 0 : 
     d[i] = 99 
    i = i + 1 

print d 

回报[9, 8, 99, 15, 6, 99, 10, 4]

我想它返回[9,8,99,99,6,99,10,99]

我怎么会增加99到原来的列表,而如果让任何意义上改变其原来的价值?像弹出或插入列表方法不能使用。

+1

要非常小心你的措辞(我不懂英语可能不是你的第一语言)。你说'如果以前的号码是偶数'“。我认为你的意思是“如果*以前的数字*甚至是”。有很大的不同。 –

+0

不应该输出'[9,8,99,15,6,99,10,99]'? – thefourtheye

+0

以及我将如何做python中的“was”部分。我是否像临时值分配给以前的值或什么? –

回答

0

搜索倒着显示列表

  1. 看到去年和前年值(N-1,N-2)
  2. 变化,如果需要
  3. 移动到以前的值(N-2的最后一个值, N-3)
  4. 重复,直到整个列表更新
4

我会建议遍历下降:

d = [9, 8, 2, 15, 6, 33, 10, 4] 
for x in xrange(len(d)-1, 0, -1): 
    if d[x - 1] % 2 == 0: 
     d[x] = 99 
print d 

在这种情况下,下一次迭代将不会改变值。

,或者可以创建为以前的值新list

或您可以添加变量,并用它在if声明

d = [9, 8, 2, 15, 6, 33, 10, 4] 
previous = d[0] 
for i, x in enumerate(d[1:]): 
    if previous % 2 == 0 : 
     previous = d[i] 
     d[i] = 99 
    else: 
     previous = d[i] 

print d 
5

试试这个。

d = [9, 8, 2, 15, 6, 33, 10, 4] 
for i in reversed(xrange(1, len(d))): 
    d[i] = 99 if d[i - 1] % 2 == 0 else d[i] 
0

试试这个:

d = [9, 8, 2, 15, 6, 33, 10, 4] 

prev=d[0] 
for i,j in enumerate(d): 
     if prev%2==0: 
       prev=j 
       d[i]=99 
     else: 
       prev=j 

print d 
相关问题