【问题标题】:How do we change the indexes of a list without changing the original list on python?我们如何在不更改 python 上的原始列表的情况下更改列表的索引?
【发布时间】:2021-06-15 20:47:54
【问题描述】:

我正在尝试将 2 添加到列表的元素中 在python中更改原始列表的元素。我使用了 append 方法,但是当我尝试返回原件时,也被修改了。 它应该像这样工作:

>> list1 = [1, 3, 5]
>> add_two(list1)
[3, 5, 7]
>> list1 == [1, 3, 5]
True

然而这是我得到的:

>> list1 = [1, 3, 5]
>> add_two(list1)
[3, 5, 7]
>> list1
[3, 5, 7]

谁能帮帮我?

【问题讨论】:

  • 添加有问题的add_two方法!
  • 请阅读minimal reproducible example 获取格式化帮助。
  • @ParthS007 似乎add_two 正在将2 添加到列表中的每个元素。但后来我不明白他为什么希望list1 == [1, 3, 5] 仍然是true
  • 因为它应该在新列表中添加 2

标签: python arrays python-3.x list python-requests


【解决方案1】:

List 是一种可变数据类型。如果您想在不更改原始列表的情况下对其进行操作,则应将该列表的副本传递给函数 add_two()。

In [1]: def add_two(lst):
   ...:     lst[2] += 2
   ...:     return lst
   ...:

In [2]: a = [ 1,2,3]

In [3]: add_two(a)
Out[3]: [1, 2, 5]

In [4]: a
Out[4]: [1, 2, 5]

In [5]: add_two(a.copy())
Out[5]: [1, 2, 7]

In [6]: a
Out[6]: [1, 2, 5]

编辑

我看到您想将每个列表元素增加 2。 那么使用列表推导是最简单的——创建一个新列表,无需传递副本...

def add_two(lst):
     return [v+2 for v in lst]

【讨论】:

  • 最好在函数内复制列表,因为它是其工作的一部分,用户不应该为此烦恼。至于每个元素加2的具体例子,return [element + 2 for element in lst]就够了。
  • 是的,没错。在这里,我还想展示原始行为。对于最终用途,在函数内部制作副本会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 2022-01-07
  • 2019-09-08
  • 2010-12-01
相关资源
最近更新 更多