2016-08-08 12 views
0

この注文で削除しようとしました:11,12,13,21,22,23,31,32,33 空のリストにとどまります。 私は定期的に削除しようとしましたが、削除のためにintを使用しなければならないことを理解しました。オブジェクトにすることはできませんので、列挙関数を使い始めました。 削除されましたが、リスト全体だけではありませんでした。 この順序で削除する方法はありますか?pythonリストを正しい順序で削除してください

b = [[['11'],['12'],['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 

for i,index in enumerate(b): 
    for j,jindex in enumerate(index): 
     print(b) 
     jindex = jindex[j+1:] 
    index = index[i+1:] 
print(b) 

print('\nnew try\n\n') 

b = [[['11'],['12'],['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 
for i,index in enumerate(b): 
    for j,jindex in enumerate(index): 
     print(b) 
     del jindex[j::] 
    del b[i::] 
print(b) 

print('\nnew try\n\n') 

b = [[['11'],['12'],['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 

for i,index in enumerate(b): 
    for j,jindex in enumerate(index): 
     print(b) 
     del jindex[j] 
    del index[i] 
print(b) 

print('\nnew try\n\n') 

b = [[['11'],['12'],['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 

for i,index in enumerate(b): 
    for j,jindex in enumerate(index): 
     print(b) 
     del b[i][j] 
    del b[i] 
print(b) 

私の出力:

[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 

new try 


[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[[], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[[], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[] 

new try 


[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[[], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
Traceback (most recent call last): 
    File "/Users/asaf/PycharmProjects/first/openurl.py", line 28, in <module> 
    del jindex[j] 
IndexError: list assignment index out of range 

Process finished with exit code 1 

結果I'amが探している:

[[['12'],['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 
[[['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 
[[['21'],['22'],['23']],[['31'],['32'],['33']]] 
[[['22'],['23']],[['31'],['32'],['33']]] 
[[['23']],[['31'],['32'],['33']]] 
[[['31'],['32'],['33']]] 
[[['32'],['33']]] 
[[['33']]] 
[[]] 
+0

あなたは、リスト内のすべての項目を削除しようとしている?、それともサブリストのすべての要素を削除していますか?もしそうなら、注文はなぜ重要なのでしょうか? –

+0

つまり、どのような結果が欲しいですか? –

+0

結果は空のリストです。 それは文字列であると考えられ、残りのテキストを段階的に移動したいので重要です。 私は大きなテキストを持っており、いくつかのメッセージに分割する必要があります。 – asaf

答えて

0

問題は、それを修正しながら、あなたのリストを反復処理しているということです。これはしばしばあなたが遭遇している正確な問題を引き起こします。むしろ、索引を繰り返し処理する必要があります(古典的なforループのような)。ただし、削除しようとしているインデックスは、繰り返し実行するインデックスと同じではないことに注意してください。むしろ、あなたは常にサブリストの最初の要素を削除してから、外側ループ内のサブリスト自体を削除します(最後の反復を除く)。

>>> b = [[['11'],['12'],['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 
>>> for sublength in [len(sub) for sub in b]: 
... for _ in range(sublength): 
...  print(b) 
...  del b[0][0] 
... if len(b) > 1: # or else you'll end up with [] 
...  del b[0] 
... 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['23']], [['31'], ['32'], ['33']]] 
[[['31'], ['32'], ['33']]] 
[[['32'], ['33']]] 
[[['33']]] 
>>> print(b) 
[[]] 
>>> 
+0

この行のアンダースコアは何ですか - >(範囲内の(sublength):)の意味ですか? – asaf

+0

@asafそれは何も意味しません。他の変数名と同じです。実際に何かを行うためにループ変数を使用しないことを示すのは単なる規則です。これは、 'x in range(sublength)のために'容易にできるかもしれません: ' –

関連する問題