簡體   English   中英

Python:對嵌套列表中的分配感到困惑

[英]Python: confused about assignment in nested lists

我將多項式放在嵌套列表中。 例如5X^3+4X^2+8X 我將系數(5,4,8)存儲在第一個列表中,將指數(3,2,1)存儲在第二個列表中:

polynom = [[5,4,8],[3,2,0]]

然后我定義一個函數來彈出像這樣的系數和指數的最后一項

def expon_coef_pop(seq):
    expon = seq[1]
    coef = seq[0]
    expon.pop()
    coef.pop()
    return coef, expon

print(expon_coef_pop(polynom))
print(polynom)

# polynom changed into [[5,4],[4,2]]

令人驚訝的是,我發現polynom的值變成了[[5,4],[3,2]] 我以為我只是修改了exponcoef值。

我不想更改多項式的值。

這怎么可能發生,以及如何處理這個問題? 我對為什么polynorm不更改功能感到困惑。 (我只是為一個簡單的示例編寫了該函數。)

coefexpon都是引用,分別指向與seq[0]seq[1]相同的列表對象。 您需要先復制列表,然后再將其從列表中彈出,這也可以一步一步完成:

def expon_coef_pop(seq):
    return seq[0][:-1], seq[1][:-1]

這是因為您通過引用傳遞了列表。 通過復制與此作業進行比較

expon = list(seq[1])
coef = list(seq[0])

只需更改簡單的修改即可。 你可以試試:

你需要改變

expon = seq[1] to expon = seq[1][:]
coef = seq[0] to coef = seq[0][:]

您的最終代碼:

polynom = [[5,4,8],[3,2,0]]
def expon_coef_pop(seq):
    expon = seq[1][:]
    coef = seq[0][:]
    expon.pop()
    coef.pop()
    return coef, expon

print(expon_coef_pop(polynom))
print(polynom)

暫無
暫無

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

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