Python中如何实现列表映射?附具体需求及代码片段
将Token句子映射为索引数字的高效实现方案
我来帮你解决这个Token到索引的映射问题!你已经明确了需求:把Token_Sentence里的每个单词转换成Mapping对应的索引值,得到目标的数字列表。先再明确下你的输入和期望输出:
输入数据
Token_Sentence = [['This','is','a','book'],['This','is','a','cat'],['Those','are','two','books']] Mapping = [['This',1],['is',2],['a',3],['book',4],['cat',5],['Those',6],['are',7],['two',8],['books',9]]
期望输出
[[1,2,3,4],[1,2,3,5],[6,7,8,9]]
优化你的实现思路
你现在写的三重嵌套循环虽然能实现功能,但效率偏低(时间复杂度为O(N*M*K),N是句子数,M是单句Token数,K是映射表长度)。更高效的方式是先把Mapping转换成字典——字典的哈希查找是O(1)时间复杂度,能大幅提升处理速度,尤其是当你的映射表或Token列表很大的时候。
完整高效代码
Token_Sentence = [['This','is','a','book'],['This','is','a','cat'],['Those','are','two','books']] Mapping = [['This',1],['is',2],['a',3],['book',4],['cat',5],['Those',6],['are',7],['two',8],['books',9]] # 第一步:将二维映射列表转为字典,方便快速查找 token_to_index = {token: idx for token, idx in Mapping} # 第二步:用列表推导式完成批量映射 result = [[token_to_index[token] for token in sentence] for sentence in Token_Sentence] print(result) # 输出:[[1, 2, 3, 4], [1, 2, 3, 5], [6, 7, 8, 9]]
如果你想完善原来的嵌套循环代码
如果你坚持要基于你原来的嵌套循环思路完成,记得在找到匹配的Token后加上break,避免不必要的循环遍历:
Token_Sentence = [['This','is','a','book'],['This','is','a','cat'],['Those','are','two','books']] Mapping = [['This',1],['is',2],['a',3],['book',4],['cat',5],['Those',6],['are',7],['two',8],['books',9]] Token_Sequence = [] # 遍历每一个句子 for a in range(len(Token_Sentence)): current_sentence = [] # 遍历当前句子里的每个Token for b in range(len(Token_Sentence[a])): target_token = Token_Sentence[a][b] # 遍历映射表找对应索引 for c in range(len(Mapping)): if target_token == Mapping[c][0]: current_sentence.append(Mapping[c][1]) break # 找到匹配后立即跳出循环,节省资源 Token_Sequence.append(current_sentence) print(Token_Sequence) # 输出期望结果
内容的提问来源于stack exchange,提问作者Tanakorn Taweepoka
相关产品推荐
相关产品推荐

