Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表,increment&;返回修改后的列表_Python_List - Fatal编程技术网

Python列表,increment&;返回修改后的列表

Python列表,increment&;返回修改后的列表,python,list,Python,List,以下代码无法按预期工作: l = [1,1] def modifyList(list): for element in list: element += 1 return list 当我运行时,我期望的列表: modifyList(l) 是[2,2]而不是[1,1] 有人能解释一下python为什么会这样做吗?您需要使用索引和增量访问列表元素: def modifyList(lst): for ind, _ in enumerate(lst): ls

以下代码无法按预期工作:

l = [1,1]

def modifyList(list):
  for element in list:
    element += 1
  return list
当我运行时,我期望的列表:

modifyList(l)
是[2,2]而不是[1,1]


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

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

def modifyList(lst):
    for ind, _ in enumerate(lst):
        lst[ind] += 1 # access list element by index and increment
    return lst
或者使用列表理解,只需在每个元素中添加1:

def modifyList(lst):
    lst[:] = [ele +1 for ele in lst] # lst[:] changes the original list
    return lst
如果要修改原始列表,实际上不需要返回值,如果要创建新列表,只需返回列表理解:
return[ele+1 for ele in lst]

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]

您的代码只是创建了一个
元素+=1
的新对象,int是不可变的,因此不会影响列表中存储的对象。如果列表中有一个可变对象,并且您对其进行了变异,那么更改将反映在代码中,但您只需临时创建一个新变量并将其丢弃。

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

def modifyList(lst):
    for ind, _ in enumerate(lst):
        lst[ind] += 1 # access list element by index and increment
    return lst
或者使用列表理解,只需在每个元素中添加1:

def modifyList(lst):
    lst[:] = [ele +1 for ele in lst] # lst[:] changes the original list
    return lst
如果要修改原始列表,实际上不需要返回值,如果要创建新列表,只需返回列表理解:
return[ele+1 for ele in lst]

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]

您的代码只是创建了一个
元素+=1
的新对象,int是不可变的,因此不会影响列表中存储的对象。如果您的列表中有一个可变对象,并且您对其进行了变异,那么更改将反映在代码中,但您只需临时创建一个新变量并将其丢弃。

原因是,当您说:

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

要修改列表,请执行以下操作:

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

这将以迭代方式将每个元素增加
1

原因是,当您说:

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

要修改列表,请执行以下操作:

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

这将迭代地将每个元素增加
1

或者谢谢-一个问题,为什么我们需要说
lst[:]=comp
,而不仅仅是
lst=comp
——为什么要使用切片?@PipS,它会像for循环一样更改原始列表,您可以删除返回值,打印原始列表
l
,您将看到更改。如果您想要一个新的列表,正如我在回答中所说的,只需返回列表即可。您可以使用函数修改列表吗?我认为这些参数是隐式独立的副本,您需要将它们指定为全局或使用return来实际修改传入的参数。@SuperBiasedMan,不,您只是传递了一个引用。谢谢-一个问题,为什么我们需要说
lst[:]=comp
而不仅仅是
lst=comp
——为什么要使用切片?@PipS,它会像for循环一样更改原始列表,您可以删除返回,打印原始列表
l
,然后您将看到更改。如果您想要一个新的列表,正如我在回答中所说的,只需返回列表即可。您可以使用函数修改列表吗?我认为这些参数是隐式独立的副本,您需要将它们指定为全局或使用return来实际修改传入的参数。@SuperBiasedMan,不,您只是传递了一个引用。