Python按单词末尾2/3个字母排序的实现问题求助
按单词末尾2/3个字母排序的正确实现
嘿,我来帮你搞定这个排序问题!你之前的代码用了lambda x: x[-2],这其实只取了每个单词的倒数第二个单个字符,而不是最后两个字符的组合,这就是结果不符合预期的原因。咱们只需要调整排序键,用字符串切片来获取末尾的2个或3个字符就行啦。
先把你的原始列表放出来:
mlist = ["shoat", "tubal", "eclat", "olam", "stat", "gnar", "babai", "scoad", "scrap"]
按末尾2个字母排序
正确的排序键应该是lambda x: x[-2:]——这个切片语法会从倒数第二个字符开始,一直取到字符串末尾,正好拿到最后两个字母的组合:
sorted_by_last2 = sorted(mlist, key=lambda x: x[-2:]) print(sorted_by_last2) # 输出结果:['scoad', 'babai', 'tubal', 'olam', 'scrap', 'gnar', 'shoat', 'eclat', 'stat']
看,这个结果和你给出的预期完全一致!
按末尾3个字母排序
同理,要按最后3个字母排序,就把切片改成x[-3:],这样会取每个单词的最后三个字符作为排序依据:
sorted_by_last3 = sorted(mlist, key=lambda x: x[-3:]) print(sorted_by_last3) # 输出结果:['babai', 'tubal', 'olam', 'eclat', 'gnar', 'scoad', 'shoat', 'scrap', 'stat']
这也完美匹配你想要的预期结果~
小补充:为什么之前的方法不行?
x[-2]只会提取单个字符,比如"shoat"和"eclat"的倒数第二个字符都是'a',排序时它们的键相同,Python会保持它们在原始列表中的相对顺序,但这不是你要的“按最后两个字母组合排序”的逻辑。而x[-2:]取的是两个字符的子串,比如"scoad"的最后两个是'ad',"babai"的最后两个是'ai',这样就能正确按组合排序啦。
内容的提问来源于stack exchange,提问作者Naveed Abbas
相关产品推荐
相关产品推荐

