Python連續賦值需要注意的一些問題

2022-09-29 14:06:14 字數 1351 閱讀 8131

在python中是可以使用連續賦值的方式來一次為多個變數進行賦值的,比如:

a = b = c = 1

a, b, c = 1, 1, 1

這些都可以完成變數的賦值,但是就有乙個問題了,比如:

a = 3

a, b = 1, a

如果按照正常的思維邏輯,先進行a = 1,在進行b = a,最後b應該等於1,但是這裡b應該等於3,因為在連續賦值語句中等式右邊其實都是區域性變數,而不是真正的變數值本身,比如,上面例子中右邊的a,在python解析的時候,只是把變數a的指向的變數3賦給b,而不是a=1之後a的結果,這一點剛開始學python的人可能容易誤解,再舉乙個leetcode裡鍊錶的例子理解就更深了。

假如要對乙個鍊錶進行翻轉,就比如把1—>2->3->4轉化為4->3->2->1

對於kvobp這個問題很簡單,只要反轉指標就可以了,假如鍊錶結構為:

class listnode:

def __init__(self, x):

self.val = x

self.next = none

我們可以用很簡單的三行**完成這個過程:

def reverselist(self, head):

l = listnode(float("-inf"))

while head:

l.next, head.next, head = head, l.next, head.next

return l.next

這裡的l是指向乙個新建的結點,因為python沒有指標的概念,所以用乙個額外的結點來代替頭指標,這裡的核心**就是中間那一行三個變數的連續賦值,如果單獨一句句來理解的話,最後肯定是想不通的,在這裡,假設head結點是鍊錶串'1->2-&gwww.cppcns.comt;3->4'的頭結點,先用新的l結點的next指標指向head的第乙個結點『1',之後將l.next(第一次也就是空)賦給了head的next指標,之後再把head的next指標(注意,這裡的next指標還是指向『2'的www.cppcns.com,而不是空)賦給head,相當於next向前移一位,這一步相當於乙個串變成了兩個:

l:『-inf'->『1'

head:『2'->『3'->『4'->『5'

#連等賦值

a=b=c=1

#拆包賦值

a,b=1,程式設計客棧2

#用_佔位和*代表不確定個引數進行拆包賦值

a=range(10)

_,b,c,*d=a

#迭代賦值

a=(1,2)

b=[(i,j)for i in a for j in a]

#交換a,b=b,a

本文標題: python連續賦值需要注意的一些問題

本文位址:

關於python連續賦值的需要注意的地方

最近開始刷leetcode,順便學習一下py node結構如下 class node object def init self val,next none self.value val self.next next 然後刷到第二題的時候,看到別人的 中一行 比較有意思 n.next n node v...

XMLHttp連續呼叫SEND需要注意的問題

我們在自己實現ajax的時候,在應用中常需要連續呼叫send函式,並寄希望send函式呼叫結束後可以自動正確呼叫其 函式,然而有時候不注意可能事與願違,產生此情況的原因在於ajax的實現上存在不正確用法。如我們寫呼叫方法 如下 var xmlhttp new xmlhttprequest 此處沒有考...

python中將函式賦值給變數時需要注意的一些問題

見過兩種函式賦值給變數的形式,一種是 a f另一種是 a f 這兩種形式是有區別的,分別總結一下。1.a f型屬於將變數指向函式。用 驗證一下 f abs f 10 10說明變數f現在已經指向了abs函式本身。直接呼叫abs 函式和呼叫變數f 完全相同。這是廖雪峰老師python教程上的例子,現在呼...