2016-11-17 9 views
0

私はまだコーディングの世界では新しく、時には最も簡単なことで苦労しています...私はValueError: list.remove(x): x not in listそれを超える私は元のリストのコピーをすでにループしているので、私は少し失われています。ここでは、コードは次のとおりです。Pythonでのremove()関数の適切な使用+ copyList経由でのループ

def revrot(strng, sz): 
    if len(strng) == 0 or sz <= 0 or sz > len(strng): 
     return '' 
    else: 
     list = [] 
     for i in strng: 
      list.append(i) 
     rest = len(strng)%sz 
     for i in range(0,rest): 
      list.pop() 
     sum = 0 
     res = '' 
     while len(list) != 0: 
      copyList = list[:] 
      for i in range(0,sz): 
       sum += 1 
       if sum%2 == 0: 
        list2 = list[:sz] 
        list2.reverse() 
        res += ''.join(list2) 
        print(res) 
        for i in range(0,sz): 
         list.remove(copyList[i]) 
       else: 
        res += ''.join(list[1:]) + ''.join(list[0]) 
        for i in range(0,sz): 
         list.remove(copyList[i]) 
    return res 

興味深い部分はwhileループで始まります。私はlist(範囲(0:sz)内の要素を削除する関数を書いたと思ったので、ある時点でlistは空であり、中断している時です) 私の得意なのは、なぜ私のremove()コマンドがスローされるのですか? ?。任意の助け

copyList 
Out[127]: ['1', '2', '3', '4', '5', '6', '7', '7', '9'] 

for i in range(0,4): 
    list.remove(copyList[i]) 

list 
Out[129]: ['5', '6', '7', '7', '9'] 

私はそれがエディタにコンソールで動作しますが、いないため、エラーを見つけるのに苦労しています理由ですおかげ

答えて

0
:とValueError私は別にそれをテストするときには、コンソールで完璧に動作しますが、その!

あなたは間違っています。インデックスに基づいてアイテムを削除していますが、インデックスでアイテムを削除すると忘れましたnあなたの商品n+1nになります。

ここでは、リストの先頭から項目を削除し、前進を続けます。リスト内の項目も後方にスワップされます。だから現時点では、あなたが実際に期待した位置にアイテムのためのインデックスを保持していないので、あなたはIndexErrorの例外を取得します。それは横断リストにあります。

それはあなたに多くの意味を行いますようにのは、例を見てみましょう:

>>> l = [1, 2, 3, 4, 5, 6, 7] 
>>> for i in range(len(l)): 
...  print 'index: ', i, 'list:', l 
...  del l[i] # better way to delete item in list based on index 
... 
index: 0 list: [1, 2, 3, 4, 5, 6, 7] 
index: 1 list: [2, 3, 4, 5, 6, 7] 
#    ^Item at zero index got deleted 
#     Now 2 is at index zero 

index: 2 list: [2, 4, 5, 6, 7] 
#    ^^ This time deleted item 3, because that is at index 2 

index: 3 list: [2, 4, 6, 7] 
index: 4 list: [2, 4, 6] 
Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
IndexError: list assignment index out of range 

リストの最初の長さはi4長さだった7、だったにもかかわらずので、最後にはそれがインデックスエラーが発生リストの一覧は3

+0

@MoinuddinQuadriありがとうございました。 CopyList [i]をremoveコマンドで使用することで、その問題を取り除くことができたと思いました。それは、範囲のインデックスを探していないので、copyList [0] = 1などになります。 copyListと範囲をリストしていない元のままですか? –

関連する問題