문자열에서 부분 문자열 목록의 위치를 어떻게 찾을 수 있습니까? 문자열을 감안할 때문자열에서 부분 문자열 목록의 위치를 찾는 방법은 무엇입니까?
:
". 세인트 피터 스 버그 행 비행기는, 이집트의 시나이 사막에 추락 단지 23 분 이륙 토요일 샤름 엘 - 셰이크에서"
그리고 문자열의 목록 :
[ '을', '비행기', ',', '대한', '바운드', '세인트', '피터', ',' '이집트', '시', '시나이', '사막', '그냥', '23', '분', '이후', '이륙', '에서' .에 ','샴 ','엘 - 셰이크 ',' ','토요일 ',' ']
원하는 출력 :
>>> s = "The plane, bound for St Petersburg, crashed in Egypt's Sinai desert just 23 minutes after take-off from Sharm el-Sheikh on Saturday."
>>> tokens = ['The', 'plane', ',', 'bound', 'for', 'St', 'Petersburg', ',', 'crashed', 'in', 'Egypt', "'s", 'Sinai', 'desert', 'just', '23', 'minutes', 'after', 'take-off', 'from', 'Sharm', 'el-Sheikh', 'on', 'Saturday', '.']
>>> find_offsets(tokens, s)
[(0, 3), (4, 9), (9, 10), (11, 16), (17, 20), (21, 23), (24, 34),
(34, 35), (36, 43), (44, 46), (47, 52), (52, 54), (55, 60), (61, 67),
(68, 72), (73, 75), (76, 83), (84, 89), (90, 98), (99, 103), (104, 109),
(110, 119), (120, 122), (123, 131), (131, 132)]
출력에 대한 설명, 첫 번째 하위 문자열 "The"는 s
문자열을 사용하여 (start, end)
색인을 사용하여 찾을 수 있습니다. 그래서 원하는 출력에서.
그래서 우리는 우리가 문자열의 목록을 다시 얻을 수 있습니다 원하는 출력, 즉의 정수의 모든 튜플을 통해 루프
>>> [s[start:end] for start, end in out]
['The', 'plane', ',', 'bound', 'for', 'St', 'Petersburg', ',', 'crashed', 'in', 'Egypt', "'s", 'Sinai', 'desert', 'just', '23', 'minutes', 'after', 'take-off', 'from', 'Sharm', 'el-Sheikh', 'on', 'Saturday', '.']
내가하려고 한 경우 :
def find_offset(tokens, s):
index = 0
offsets = []
for token in tokens:
start = s[index:].index(token) + index
index = start + len(token)
offsets.append((start, index))
return offsets
이 있습니까 문자열에서 하위 문자열 목록의 위치를 찾는 또 다른 방법은 무엇입니까?
멋지게 짧은뿐만 아니라 쾌적하게 비효율적 호출'있는 .index()'를 두 번 누릅니다. – 9000
또한 반복되는 단어가 있으면 작동하지 않습니다. '.index()'는 항상 첫 번째 인스턴스 만 가져 오게됩니다 = ( – alvas
''평면, 평면 ''; '=' '평면', '' ''평면 ']' – alvas