def merge(l1,l2):
i=0;
while((l1[i]!=none)||(l2[i]!=none)):
SyntaxError:無效的語法 是一個新手我無法弄清楚什麼是錯的代碼。蟒蛇while循環
def merge(l1,l2):
i=0;
while((l1[i]!=none)||(l2[i]!=none)):
SyntaxError:無效的語法 是一個新手我無法弄清楚什麼是錯的代碼。蟒蛇while循環
與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指出了這一點)
即使更 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的練習題)
感謝名單了很多,這是真正的幫助 – 2010-04-20 06:17:14
'不是無'會更pythonic – SilentGhost 2010-04-19 10:38:43
@SilentGhost:隨時可以改變它下次。 ;-) – 2010-04-19 10:44:11