2010-12-10 3 views
2

저는 파이썬 초보자입니다. 기본적으로 슬래시 문자에 대한 특정 테이블 셀을 검색하고 있습니다. 셀에 해당 문자가 포함되어 있으면 전체 행을 삭제하려고합니다.파이썬은 문자열에서 앞으로 슬래시 찾기

counter = 0 
for row in table: 
    if row[7].find("/") != -1: 
     del table[counter] 
     continue 
    counter+=1 

위의 코드는 절대로 슬래시를 감지하지 않지만 슬래시를 대체하는 다른 문자를 찾습니다. 어떤 도움이라도 대단히 감사 할 것입니다.

+0

이유를 색인 7? '[/] in row [7] '구문을 사용하면 Python 적으로 훨씬 더 효과적입니다. 반복되지 않는 목록의 요소를 삭제하지 않아야 정의되지 않은 동작이 발생합니다. 'for counter, row in enumerate (table) :'을 사용하여 자신의 카운터 변수를 유지하지 않아도됩니다. – marcog

+0

@marcog : 불행히도이 경우에는'enumerate()'가 도움이되지 않습니다. –

답변

4

이 코드에는 여러 가지 문제가 있으므로 단지 다시 작성하는 것이 더 쉽습니다.

table[:] = [row for row in table if '/' not in row[7]] 
+6

시간이 걸릴 경우 원래 코드에서 무엇이 잘못되었는지 설명하는 데 시간이 걸릴 수도 있습니다. – pafcu

+0

감사합니다. 이것은 완벽하게 작동했습니다. 내가 말했듯이, 나는 초보자이며 모든 구문을 고르고 있습니다. –

+0

@Tyler : 가장 기억해야 할 것은 반복하는 시퀀스를 수정하지 않는 것입니다. –

-2

당신은 어쩌면 ..

for row in table: 
    if '/' in row[7]: 
     row.delete() 

을 할 수 없습니다 또는 당신이 정말로 델에 테이블에서 행을 카운터를 필요로하는 경우, 다음 그냥 카운터를 다시 넣습니다.

+4

This 코드는 아무 것도하지 않습니다. 'row'라는 이름은 루프에 의해 정의되고'table'에있는 어떤 것도 참조하지 않습니다. –

+0

이 코드는 정상적으로 작동하므로 사용자의 의견을 볼 수 없습니다. – Iacks

+0

'del'은 객체가 아닌 이름을 삭제합니다. 해당 객체는 부수적으로 실행하여 삭제할 수 있습니다. –