하위 문자열과 일치하는 목록에서 요소를 제거하려면 어떻게해야합니까?하위 문자열과 일치하는 목록에서 항목 제거 - Python
내가 제거 할 필요가있는 몇 연속 누락 된 항목 것 같은 나는 pop()
및 enumerate
방법을 사용하여 목록에서 요소를 제거하려고했지만 보인다 않은 :
sents = ['@$\tthis sentences needs to be removed', 'this doesnt',
'@$\tthis sentences also needs to be removed',
'@$\tthis sentences must be removed', 'this shouldnt',
'# this needs to be removed', 'this isnt',
'# this must', 'this musnt']
for i, j in enumerate(sents):
if j[0:3] == "@$\t":
sents.pop(i)
continue
if j[0] == "#":
sents.pop(i)
for i in sents:
print i
출력 :
this doesnt
@$ this sentences must be removed
this shouldnt
this isnt
#this should
this musnt
원하는 출력 :
this doesnt
this shouldnt
this isnt
this musnt
목록을 반복하는 동안 목록에서 항목을 제거하는 전형적인 경우입니다. 여기에 관련된 수십 가지의 스택 오버 플로우 관련 질문을 읽어보십시오. 또한 [문서의 노트] (http://docs.python.org/reference/compound_stmts.html#for)를 참조하십시오. –
컨테이너의 반복 길이를 변경하는 동안 항상 컨테이너의 길이를 변경하지 않는 것이 좋습니다. 이는 재앙을위한 방법입니다. – wim
일반적으로 전체 목록을 수정하는 것보다 필터링 된 새 목록을 만드는 것이 좋습니다. 변경 불가능한 알고리즘은 항상 추론하기가 더 쉽습니다 (작성 방법을 쉽게 파악할 수있는 것은 아니지만). 값을 바꾸는 것만으로도 작업 환경의 효율성이 향상되는 경우도 있지만, 목록 가운데에서 삭제 또는 삽입 할 때는 일반적으로 덜 강력한 논리와 함께 효율성이 떨어집니다. – abarnert