簡體   English   中英

如何在python中使列表的第一個元素不變?

[英]How to make the first element of the list unchange in python?

這是我的清單,

a = [['a','b','c','d'],['e','f','g','h'],['i','j','k','l'],['m','n','o','p']]

這是我的功能,

def add(change,unchange):
    a = change
    b = unchange
    a[0].insert(a[0].index(a[0][2]),"high_range")
    a[0].insert(a[0].index(a[0][3]),"low_range")
    print(a)
    print(b)

當我嘗試執行此功能時,

add(a,a[0])

我得到這個輸出,

[['a', 'b', 'high_range', 'low_range', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l'], ['m', 'n', 'o', 'p']]
['a', 'b', 'high_range', 'low_range', 'c', 'd']

但我的預期輸出如下,

[['a', 'b', 'high_range', 'low_range', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l'], ['m', 'n', 'o', 'p']]
['a', 'b', 'c', 'd']

如何使列表的第一個元素在第二個變量中保持不變? 對不起,我是新手。

由於列表是可變類型,因此當您將值插入a這也會反映在b ,因為它們是指向同一列表的指針。 您可以在將值插入列表之前打印b ,或者像這樣制作b一個unchange的副本:

def add(change,unchange):
    a = change
    b = unchange[:]
    a[0].insert(2, "high_range")
    a[0].insert(3, "low_range")
    print(a)
    print(b)

此外, a[0].index(a[0][2])是多余的,你已經知道索引是 2。

主要問題在於:

add(a, a[0])

因為你是變異a函數里面a[0]會發生變化,以及它們指向同一個東西。 您需要相應地設計您的程序。 你可以參考這個答案。 如何克隆或復制列表?

根據您的要求,您可以執行此操作。

  1. 要么在調用函數時提供一個副本。

add(a, a[0][:]) # 或

  1. 閱讀@alec 的回答。

您的功能很完美,但請執行以下操作:

add(a,a[0][:])

這將使第二個變量,即a[0]成為一個副本,它將保持不變。

暫無
暫無

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

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