2

我正在做一些练习题,一个程序要求我将列表中的数字更改为 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

4 回答 4

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]
于 2013-10-23T07:34:51.117 回答
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
于 2013-10-23T07:24:04.127 回答
0

向后搜索列表

  1. 查看最后一个和最后一个值之前(n-1,n-2)
  2. 如果需要,更改最后一个值
  3. 移动到以前的值 (n-2,n-3)
  4. 重复直到整个列表被更新
于 2013-10-23T07:18:30.823 回答
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
于 2013-10-23T07:55:01.290 回答