更改列表项而不更改原始值

时间:2013-10-23 07:15:31

标签: python list

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

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添加到原始列表中?不能使用像pop或insert这样的列表方法。

4 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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

答案 2 :(得分:0)

向后搜索列表

  1. 查看最后一个值和最后一个值(n-1,n-2)
  2. 根据需要更改最后一个值
  3. 移至上一个值(n-2,n-3)
  4. 重复直到整个列表更新

答案 3 :(得分: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