2010-04-19 146 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