0
def nast(L):
   i=len(L)-1
   while L != [1 for i in range(len(L))]:
      if L[i]==0:
         L[i]=1
         break
      i=i-1
   for j in range(i+1,len(L)):
      L[j]=0
   return L  

L = [0,0,1,0,1]

我想给这个函数'L'列表,但是当我这样做时,我什么也得不到,IPython 内核似乎被冻结了;当我使用“中断当前内核”选项时,我得到:

KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-3-000635d72af9> in <module>()
----> 1 nast(L)

<ipython-input-1-7918814a171f> in nast(L)
      1 def nast(L):
      2    i=len(L)-1
----> 3    while L != [1 for i in range(len(L))]:
      4       if L[i]==0:
      5          L[i]=1

KeyboardInterrupt: 

我想知道是什么问题,提前感谢您的帮助。

4

1 回答 1

0

当你这样做时:

while L != [1 for i in range(len(L))]:

变量从列表理解中i泄漏出来,所以在那一行之后,i总是len(L)-1,你的 while 循环总是检查L.

这在 Python 3 中已修复,因此您的代码可以在那里工作(至少,它完成了 - 我不知道它是否在做您期望的事情)。要在 Python 2 中执行此操作,您需要将其中一个i变量称为其他变量。

于 2013-11-06T01:52:41.763 回答