簡體   English   中英

關於為什么某個 function 不改變原始列表的值(Python)的初學者問題?

[英]Beginner question about why a certain function does not change the value of the original list (Python)?

我一直在努力學習編碼,剛剛發現 python 在同一位置存儲設置為彼此相等的變量(例如 nums = nums_copy),所以如果你改變一個,你就改變另一個(如果我'我錯了)。

所以我看到了這個 function 的例子,想知道為什么它不改變原來的列表?

def delete_starting_evens(lst):
  while (len(lst) > 0 and lst[0] % 2 == 0):
    lst = lst[1:]
  return lst

my_list = [4, 8, 10]
print(delete_starting_evens(my_list), my_list)

output:

[] [4, 8, 10]

您永遠不會對原始列表進行操作。 在每次循環迭代中,您創建一個從前一個值派生的新列表 ( lst[1:] ),然后將其分配給您的局部變量lst

如果要更改原始列表,請使用列表更改方法,例如

lst.pop()

我認為您正在打印 2 個變量,第一個是您的 function 的返回,然后 my_list 是 [4, 8, 10]

lst是局部變量。 當您分配給它時,您只需更改變量所指的內容; 它對先前綁定到名稱的參數沒有影響。

如果要刪除所有前導偶數,可以使用del

def delete_starting_evens(lst):
    while lst and lst[0] % 2 == 0:
        del lst[0]

您不需要返回列表,因為lstmy_list都引用同一個列表,因此通過lst所做的任何更改也可以從my_list中看到。

正如有些用戶所說的需要直接對列表進行操作而不是賦值,也可以使用關鍵字is來檢查兩個變量是否具有相同的id:

def delete_starting_evens(lst):
    while len(lst) > 0 and not lst[0] % 2:
        lst.pop(0)

    return lst


my_list = [4, 8, 10]
print(delete_starting_evens(my_list) is my_list)

輸出

True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM