如何给元组/列表中的字符串元素添加字符?及3-grams单词首尾加#实现方法
让我来一步步帮你解决这两个问题~
问题1:如何向元组或列表中的字符串元素添加字符?
不管是列表还是元组,核心思路都是遍历每个字符串元素并做拼接操作,区别在于列表是可变类型,可直接生成新列表或修改原列表;而元组是不可变类型,只能生成新的元组。
给你几个常用的实现方式:
处理列表:
用列表推导式是最简洁的写法,比如给每个元素首尾加#:my_list = ["apple", "banana", "cherry"] modified_list = [f"#{item}#" for item in my_list] # 输出结果:['#apple#', '#banana#', '#cherry#']如果想直接修改原列表,也可以通过索引遍历更新:
for i in range(len(my_list)): my_list[i] = f"#{my_list[i]}#"处理元组:
因为元组无法修改内部元素,我们可以用生成器表达式配合tuple()函数生成新元组:my_tuple = ("apple", "banana", "cherry") modified_tuple = tuple(f"#{item}#" for item in my_tuple) # 输出结果:('#apple#', '#banana#', '#cherry#')
问题2:给3-grams中的每个单词首尾添加
# 你的现有代码已经能正确生成3-grams了,只需要在拆分句子为单词列表之后,先给每个单词加上首尾的#,再传入ngrams函数就可以达成目标。
完整的实现代码如下:
from nltk.util import ngrams # 记得导入ngrams模块哦 sentence = '<s> online auto body <s>' n = 3 # 第一步:给每个单词首尾拼接# processed_words = [f"#{word}#" for word in sentence.split()] # 第二步:基于处理后的单词生成3-grams word_3grams = ngrams(processed_words, n) # 遍历输出结果 for grams in word_3grams: print(grams)
运行这段代码后,你会得到想要的输出:
('#<s>#', '#online#', '#auto#') ('#online#', '#auto#', '#body#') ('#auto#', '#body#', '#<s>#')
简单拆解下逻辑:
sentence.split()会把句子拆成原始单词列表:['<s>', 'online', 'auto', 'body', '<s>']- 通过列表推导式给每个单词拼接
#,得到处理后的列表:['#<s>#', '#online#', '#auto#', '#body#', '#<s>#'] - 把处理后的列表传入
ngrams函数,生成的3-grams自然就是每个单词带#的形式啦。
内容的提问来源于stack exchange,提问作者Marisa
相关产品推荐
相关产品推荐

