주어진 하위 문자열로 시작하는 모든 요소에 대해 정렬 된 문자열 목록을 검색하려고합니다. ['bob', 'bob', 'bob']
를 인쇄Python에서 문자열 접두어에 대한 이진 검색 수행
import bisect
names = ['adam', 'bob', 'bob', 'bob', 'bobby', 'bobert', 'chris']
names.sort()
leftIndex = bisect.bisect_left(names, 'bob')
rightIndex = bisect.bisect_right(names, 'bob')
print(names[leftIndex:rightIndex])
:
다음은 정확한 모든 일치를 발견하는 예입니다.
대신 이으로 시작하고 'bob'인 모든 이름을 검색하고 싶습니다. 원하는 출력은 ['bob', 'bob', 'bob', 'bobby', 'bobert']
입니다. bisect 검색의 비교 방법을 수정할 수 있다면 name.startswith('bob')
을 사용하면됩니다.
예를 들어, Java에서는 쉽게 할 수 있습니다. 나는 다음과 같이 사용할 것이다 :
Arrays.binarySearch(names, "bob", myCustomComparator);
여기서 'myCustomComparator'는 startswith 메소드 (및 몇 가지 추가 로직)를 이용하는 비교기이다.
어떻게 이것을 파이썬에서 할 수 있습니까?
필요에 따라 trie 데이터 구조체를 사용할 수 있습니다. 다시 – jterrace