[英]Python modifying list within function
我正在嘗試讓函數通過將列表的引用傳遞給它來修改列表。 下面的程序顯示了當我將列表傳遞給函數時,僅生成一個局部變量。 有什么方法可以從函數中的列表中選擇一些成員? 謝謝。
def func(list1):
list1 = list1[2:]
print(list1) # prints [2, 3]
list1 = [0, 1, 2, 3]
func(list1)
print(list1) # prints [0, 1, 2, 3]
Edit1:我也嘗試使用以下功能。 它也不起作用。 可能是因為在func2中list1成為引用list2的局部變量。
def func2(list1):
list2 = list1[2:]
list1 = list2
print(list1) # prints [2, 3]
list1 = [0, 1, 2, 3]
func(list1)
print(list1) # prints [0, 1, 2, 3]
您必須返回並將返回的值分配給list1
:
def func(list1):
list1 = list1[2:]
print(list1) # prints [2, 3]
return list1
list1=func(list1)
或者您必須引用list1
作為func()
global
func()
。
list1 = list[2:]
將創建一個列表,並使局部變量引用新列表。 它不會影響原始列表。
使用列表切片分配獲得所需的內容:
def func(list1):
list1[:] = list1[2:]
print(list1) # prints [2, 3]
或使函數返回新列表,然后在調用部分分配返回值:
def func(list1):
return list[2:]
list1 = [0, 1, 2, 3]
list1 = func(list1)
....
您遇到了“按名稱傳遞”的問題。 您顯示的代碼僅更改func()本地的“ list1”名稱所指向的內容。 如果您使用“ list1”名稱更改所引用內容的值,而不是將func()中的“ list1”名稱指向其他名稱,則程序的其余部分將看到該名稱。
def func(list1):
del list1[0:2]
# list1 = list1[2:]
# print(list1) # prints [2, 3]
list1 = [0, 1, 2, 3]
func(list1)
print(list1)
選項1:不這樣做。 副作用是邪惡的:)
選項2:如果必須,請在函數作為參數接收的對象上應用破壞性方法:
def func(list1):
list1 = list1[2:]
list1.pop(0)
list1.pop(0)
print(list1) # prints [2, 3]
list1 = [0, 1, 2, 3]
func(list1)
print(list1) # prints [2, 3]
請轉到http://www.pythontutor.com/visualize.html可視化您的代碼。 它會為您提供更准確的解釋。
這是一個簡短的解釋,以及兩個可能的解決方案供您提問:
list1 = list1[2:]
該行創建一個新列表,並將其分配給func名稱空間中的局部變量list1 ,同時保持全局列表不變 。
如果要更改原始列表:
請使用就地更改方法 (刪除,彈出等)獲取可在此處找到的列表。
或者您可以返回像這樣的新列表:
def func(list1): list1 = list1[2:] print(list1) # prints [2, 3] return list1 list1 = [0, 1, 2, 3] list1 = func(list1) print(list1) # prints [2, 3]
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.