2016-08-08 2 views
0

나는이 순서대로 삭제하려고했습니다 : 11,12,13,21,22,23,31,32,33 그리고 빈 목록으로 유지하십시오. 처음부터 정기적 인 삭제를 시도했지만 삭제를 위해 int를 사용해야한다는 것을 이해하고 개체를 사용할 수 없으므로 열거 기능을 사용하기 시작했지만 또 다른 문제점을 발견했습니다. 전체 목록이 삭제되지는 않았지만 일부만 삭제되었습니다. 이 순서로 삭제할 수 있나요?올바른 순서로 파이썬 목록을 삭제하십시오

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 classic-for-loop) 목록을 수정해야합니다. 그러나 삭제하려는 인덱스가 반복되는 인덱스와 다른 것을 고려해야합니다. 오히려 항상 하위 목록의 첫 번째 요소를 삭제 한 다음 바깥 쪽 루프의 하위 목록 자체를 삭제합니다 (마지막 반복은 제외).

>>> 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)'에 대해서도 쉽게 ' –

관련 문제