如何從字符串中找到子字符串列表的位置?如何從字符串中找到子字符串列表的位置?
給定一個字符串:
「飛機,開往聖彼得堡,墜毀在埃及西奈沙漠僅23分鐘後起飛,從沙姆沙伊赫星期六」。
與子列表:
[ '的', '飛機', ' ' '束縛', '對', '聖', '聖彼得堡',',' ,'墜毀','in','埃及',''s','西奈','沙漠','just','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
嘗試'='飛機,飛機'; t = ['The','plane',',','plane']' – alvas