【问题标题】:How to modify a list in place如何就地修改列表
【发布时间】:2018-06-16 08:37:52
【问题描述】:

我想为列表中的每个元素加 1 而不创建新元素

i = [1,2,3,4,5]
for each in i:
    i[i.index(each)] = each+1
print(i)

但它会像这样返回......

[6,2,3,4,5]

似乎一个在第一个元素中添加一个..但我想为每个元素添加一个..

【问题讨论】:

  • @zimdero 不,你根本没有。列表是可变的。
  • @Abhishek 那个骗子没有回答这个问题。 OP 不想创建新的列表对象,他们想修改现有的对象
  • 欺骗目标回答了问题,但(奇怪地)创建了一个新列表。
  • @jedwards 我不同意。仅仅因为结果在数字上相同并不意味着它回答了问题,因为 OP 在“......在列表中而不创建新列表”中是明确的
  • @roganjosh 抱歉,我的“回答问题”不清楚。我同意这不是一个很好的欺骗目标。

标签: python python-3.x


【解决方案1】:
lst = [1,2,3,4,5]
for i, x in enumerate(lst):
    lst[i] = x + 1
print(lst)

输出

[2, 3, 4, 5, 6]

【讨论】:

    【解决方案2】:

    在下一次递增 1 后 i.index(each) 在这种情况下总是返回第一个元素

    for idx in range(len(i)):i[idx]+=1
    

    【讨论】:

      【解决方案3】:

      尝试使用列表长度的range

      例如:

      i = [1,2,3,4,5]
      for each in range(len(i)):
          i[each]= i[each]+1
      print(i)
      

      输出:

      [2, 3, 4, 5, 6]
      

      【讨论】:

      • 投反对票的你能告诉我这是不是错误的方法吗?
      • 我不是反对者,但你可以打赌你因为使用 C 风格循环 (for index in range(len(seq))) 而不是更惯用的 for index, item in enumerate(seq) 而被反对。我的 2 美分...
      • 哦,好吧...我没有使用enumerate,因为我认为这对这项任务来说是不必要的。猜我错了。不管怎么说,还是要谢谢你 :)。我在 stackoverflow 中学到了很多编码 :)。
      猜你喜欢
      • 1970-01-01
      • 2012-11-11
      • 2019-11-10
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      相关资源
      最近更新 更多