【问题标题】:Changing a list item without changing original values更改列表项而不更改原始值
【发布时间】:2013-11-01 08:19:34
【问题描述】:

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

【问题讨论】:

  • 对你的措辞要非常小心(我知道英语可能不是你的第一语言)。你说"if the number previously is even”。我想你的意思是“如果前一个数字是偶数”。有很大的不同。
  • 输出应该是[9, 8, 99, 15, 6, 99, 10, 99]吗?
  • 以及我将如何在 python 中执行“was”部分。我是否将临时值分配给以前的值或其他东西?
  • 没有,因为 2 是偶数,所以 15 应该改为 99

标签: python list


【解决方案1】:

试试这个。

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]

【讨论】:

    【解决方案2】:

    我建议迭代降序:

    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
    

    【讨论】:

      【解决方案3】:

      向后搜索列表

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

      【讨论】:

        【解决方案4】:

        试试这个:

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-02-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-10
          • 1970-01-01
          相关资源
          最近更新 更多