2013-02-19 22 views
1

2 차원 배열의 첫 번째 열에서 문자열을 검색해야합니다. 가장 확실한 방법은 내가 같은 행에 do_a_bunch_of_stuff 수 있도록 "나는"어디 알 필요가2 차원 배열에서 문자열을 검색하는 가장 빠른 방법은 무엇입니까

for i in range (0, len(list)): 
if list[i][0]==searchstring: 
    list[i][4]=do_a_bunch_of_stuff 

입니다. 2 차원 배열의 모든 행을 반복해야합니다.

속도가 중요한 코드가 아닙니다. 가장 빠른 (CPU 성능) 방법은 무엇입니까?

+0

배열이 어떤 방식으로 정렬되어 있습니까? – dckrooney

+0

정렬되지 않았습니다. –

+0

2D 배열이어야합니까? 예를 들어 더 빠른 성능을 제공하는 다른 데이터 구조 (사전 등)의 사용을 고려하고 있습니까? – abought

답변

1

정말 빠른 방법은 없지만 항상 검색 문자열의 각 내부 목록의 첫 번째 요소를 비교해야합니다. 이 인덱스 조회의 몇 피할 수 있기 때문에

다음은 소폭 빠른 단지가 될 수 있습니다 열이 정렬되지 않은 때문에

for x in lst: 
    if x[0] == searchstring: 
     x[4] = do_a_bunch_of_stuff 
+0

또한 목록을 만드는 "범위"호출을 피할 수 있습니다 (큰 목록 일 수도 있음). – JCash

0

는, 선형 검색은으로, 가장 빠른 당신의 검색에 대한 희망 할 수있을 것입니다 모든 요소를 ​​확인해야합니다.

index = {} 
for i in range (0, len(list)): 
    index[list[i]] = index.get(list[i], list()) + [i] 

당신은 단순히 사용을 검색해야하는 문자열의 인덱스를 찾아 볼 수 있습니다 : 이것은 당신이 반복적으로 수행해야하는 프로세스 인 경우

, 당신은 사전을 사용하여 인덱스를 만들 수

rows = index[some_string] 

열 0의 각 고유 값과 부팅 할 int 목록을 저장하기 때문에 추가 메모리 오버 헤드가 발생합니다.

데이터를 2D 배열 형식으로 유지할 필요가없는 경우 사전으로 재구성하는 것이 좋습니다. 검색 문자열을 튜플 목록에 매핑되는 키로 사용할 수 있습니다. 여기서 각 튜플은 해당 행의 다른 열의 데이터를 보유합니다.

관련 문제