Python列表、增量和返回修改的lis

2024-09-30 14:19:34 发布

您现在位置:Python中文网/ 问答频道 /正文

以下代码未按预期工作:

l = [1,1]

def modifyList(list):
  for element in list:
    element += 1
  return list

当我运行时,我期望的列表:

^{pr2}$

是[2,2]而不是[1,1]

有人能解释一下python为什么这样做吗?在


Tags: 代码in列表forreturndefelementlist
2条回答

原因是,当你说:

for element in list:
    element += 1

您从列表中获取一个元素并将其分配给变量element,但这不会更新列表中的元素。因此,列表保持原样,未经修改。在

要修改列表:

^{pr2}$

这将以1迭代方式递增每个元素。在

您需要使用索引和增量访问列表元素:

def modifyList(lst):
    for ind, _ in enumerate(lst):
        lst[ind] += 1 # access list element by index and increment
    return lst

或者使用列表理解法,在每个元素中添加1:

^{pr2}$

{1>如果你不想返回一个新的列表,那就不要返回一个新的列表

def mod_in_place(lst):
   lst[:] = [ele +1 for ele in lst] # lst[:] changes the original list

现在只要调用传递列表的函数,就会更改传入的原始列表/对象:

In [3]: l = [1,1]   
In [4]: mod_in_place(l)    
In [5]: l
Out[5]: [2, 2]       

创建新列表/对象:

def create_new_list(lst):
    return [ele + 1 for ele in lst]  

现在创建一个新列表,保持原始列表不变:

In [7]: l = [1,1]  
In [8]: l2 = create_new_list(l)    
In [9]: l
Out[9]: [1, 1]   # original list not changed
In [10]: l2
Out[10]: [2, 2]

{{ints>只会影响到不可变对象列表中,因此不会影响到新的对象。如果你的列表中有一个可变的对象,并且你对它进行了变异,那么这些变化将被反映出来,但是在你的代码中,你只需临时创建一个新的变量并将其丢弃。在

相关问题 更多 >