Python技术求助:如何检查列表中相邻字符串是否具有相同首字母
解决相邻单词首字母检查问题
嘿Paul,我来帮你搞定这个需求!你前面的分词和转小写步骤都做得很对,但生成嵌套列表这一步其实没必要——我们要取单词的首字母,直接用word[0]就能拿到(Python里字符串可以像列表一样通过索引访问字符,首字母是索引0,不是1哦,你之前写的myString_words_lower[x][1]会拿到第二个字符)。
下面给你两种简单的实现方法,都能帮你找出首字母相同的相邻单词:
方法一:用索引遍历列表
这种方法适合新手理解,通过索引逐个访问相邻的单词:
import nltk myStrings = "Bob build a house" myStrings_words = nltk.word_tokenize(myStrings) # 转成小写,方便忽略大小写比较 myStrings_words_lower = [word.lower() for word in myStrings_words] # 从第2个单词开始遍历(索引1),和前一个单词(索引i-1)比较 for i in range(1, len(myStrings_words_lower)): prev_word = myStrings_words_lower[i-1] curr_word = myStrings_words_lower[i] # 比较两个单词的首字母 if prev_word[0] == curr_word[0]: print(f"首字母相同的相邻单词:{prev_word} 和 {curr_word}")
运行这段代码,会输出:
首字母相同的相邻单词:bob 和 build
方法二:用zip配对相邻单词(更Pythonic)
zip函数可以把两个列表的元素一一配对,我们把原列表和它的切片(从第2个元素开始)传入,就能直接得到相邻的单词对,代码更简洁:
import nltk myStrings = "Bob build a house" myStrings_words = nltk.word_tokenize(myStrings) myStrings_words_lower = [word.lower() for word in myStrings_words] # zip会把(myStrings_words_lower[0], myStrings_words_lower[1]), (myStrings_words_lower[1], myStrings_words_lower[2])... 配对成元组 for prev_word, curr_word in zip(myStrings_words_lower, myStrings_words_lower[1:]): if prev_word[0] == curr_word[0]: print(f"首字母相同的相邻单词:{prev_word} 和 {curr_word}")
这段代码的输出和方法一完全一样,但写法更简洁,是Python里常用的处理相邻元素的技巧。
小提示
如果你需要把结果存起来而不是直接打印,可以创建一个列表来收集符合条件的单词对:
matching_pairs = [] for prev_word, curr_word in zip(myStrings_words_lower, myStrings_words_lower[1:]): if prev_word[0] == curr_word[0]: matching_pairs.append((prev_word, curr_word)) print("所有首字母相同的相邻单词对:", matching_pairs)
输出会是:
所有首字母相同的相邻单词对: [('bob', 'build')]
内容的提问来源于stack exchange,提问作者paul
相关产品推荐
相关产品推荐

