2013-10-23 81 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 
相關問題