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