2010-04-19 247 views
2
def merge(l1,l2): 
i=0; 
while((l1[i]!=none)||(l2[i]!=none)): 

SyntaxError:無效的語法 是一個新手我無法弄清楚什麼是錯的代碼。蟒蛇while循環

回答

12

or更換||,使None大寫(而失去分號):

def merge(l1, l2): 
    i = 0 
    while l1[i] != None or l2[i] != None: 
    pass 

(正如你所看到的,括號也是多餘的。)

此外,!= None可以改爲is not None

while l1[i] is not None or l2[i] is not None: 

(感謝@ SilentGhost指出了這一點)

+4

'不是無'會更pythonic – SilentGhost 2010-04-19 10:38:43

+0

@SilentGhost:隨時可以改變它下次。 ;-) – 2010-04-19 10:44:11

4

即使 Python的將是這樣的(因爲它看起來像你迭代兩個列表,直到一個打一個「無」值):

for l1val,l2val in zip(l1,l2): 
    if l1val is None or l2val is None: 
    break 
    ... rest of while loop goes here, using l1val and l2val 
     instead of l1[i] and l2[i] 

事實上,沒有哨兵看起來有點奇怪。如果這是你加入到最後的東西,所以你知道你什麼時候在列表的末尾,那麼不要打擾 - 只要使用Python自己的迭代功能(for循環自動停止在它們迭代的列表的末尾。 *)

for l1val,l2val in zip(l1,l2): 
    ... body of while loop goes here, using l1val and l2val 
     instead of l1[i] and l2[i] 

* - 他們不真的自動停止 - 列表迭代引發異常StopIteration異常,這是由for循環的信號停止循環抓獲。

我的水晶球變得模糊的,但還有一個線索,在你的方法名「合併」。比方說,合併需要兩個列表,每個表是一個整數列表,並通過「合併」,你的意思是返回相應值的L1和L2總和的一個新的列表。以下是合併看起來像一個循環:

def merge(l1, l2): 
    retl = [] 
    for v1,v2 in zip(l1, l2): 
    retl.append(v1+v2) 
    return retl 

作爲一個新手,你應該瞭解和獲得非常舒服的一個名爲「列表理解」的概念。使用列表理解,可以簡化您的合併方法簡單:

def merge(l1, l2): 
    return [v1+v2 for v1,v2 in zip(l1, l2)] 

這等同於以前的功能 - 請研究這些,看到是如何工作的。最後,在Python的鴨子打字的瞬間,運行合併原樣,但這次它傳遞一個列表列表,而不是一個整數列表。 (作爲OP的練習題)

+0

感謝名單了很多,這是真正的幫助 – 2010-04-20 06:17:14