Python函数decode()求助:如何提取金字塔每行的最后一个单词?
问题:提取金字塔每行最后一个单词时错误包含所有单词
我的decode()函数需要读取.txt文件中的文本,将数字-单词对按数字顺序排列成金字塔形状,并返回由每行最后一个单词组成的字符串。
我已成功完成数字-单词对的排列,但尝试提取每行最后一个单词时,结果字符串会包含所有单词。
原代码
txt_file = ['3 love', '6 computers', '2 dogs', '4 cats', '1 I', '5 you'] def decode(): sorted_file = sorted(txt_file) row = 0 last_words_string = '' for i in range(len(sorted_file)): for j in range (0, i + 1): if row >= len(sorted_file): break pairs = sorted_file[row].split() last_word = pairs[-1] last_words_string += last_word + ' ' row += 1 print(pairs, end=' ') print() print(last_words_string) decode()
当前输出
['1', 'I'] ['2', 'dogs'] ['3', 'love'] ['4', 'cats'] ['5', 'you'] ['6', 'computers'] I dogs love cats you computers
我需要的输出是"I love computers",请问问题出在哪?
问题根源
你现在的代码会把每个单词都追加到last_words_string里,而不是只保留每行的最后一个单词。内层循环的每一次迭代都执行了last_words_string += last_word + ' ',导致所有单词都被加入结果。
修正方案
只需要在每行的最后一个元素处理时,才将单词加入结果字符串。可以通过判断j == i(因为内层循环j从0到i,当j等于i时,就是当前行的最后一个元素)来实现:
修改后的代码:
txt_file = ['3 love', '6 computers', '2 dogs', '4 cats', '1 I', '5 you'] def decode(): sorted_file = sorted(txt_file) row = 0 last_words_string = '' for i in range(len(sorted_file)): for j in range(0, i + 1): if row >= len(sorted_file): break pairs = sorted_file[row].split() last_word = pairs[-1] # 仅当是当前行最后一个元素时,才添加到结果 if j == i: last_words_string += last_word + ' ' row += 1 print(pairs, end=' ') print() # 去掉末尾多余的空格 print(last_words_string.strip()) decode()
修正后输出
['1', 'I'] ['2', 'dogs'] ['3', 'love'] ['4', 'cats'] ['5', 'you'] ['6', 'computers'] I love computers
内容的提问来源于stack exchange,提问作者Julianna M
相关产品推荐
相关产品推荐

