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 カーネルがフリーズしているようです。「Interrupt current kernet」オプションを使用すると、次のようになります。

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 で修正されたため、コードはそこで動作します (少なくとも、終了します。期待どおりに動作しているかどうかはわかりません)。iPython 2 でこれを行うには、変数の 1 つを別の名前で呼び出す必要があります。

于 2013-11-06T01:52:41.763 に答える