如何在Python中按第2、3个或指定位置单词对句子列表按字母排序
Python 按句子指定位置单词排序列表的实现方法
效果示例:
输入:["The efgh ijk", "The abcd efgh", "The aab xyz"]
按第2个单词排序输出:["The aab xyz", "The abcd efgh", "The efgh ijk"]
基础实现
直接使用Python内置的sorted()函数,通过lambda表达式定义排序key即可:
input_list = ["The efgh ijk", "The abcd efgh", "The aab xyz"] # 按第2个单词排序,自然语言计数的第n个单词对应索引为n-1 sorted_list = sorted(input_list, key=lambda s: s.split()[1]) print(sorted_list) # 输出:['The aab xyz', 'The abcd efgh', 'The efgh ijk']
通用可配置版本
可以封装为通用函数,支持指定任意位置的单词作为排序依据,同时兼容句子单词数不足的边界场景:
def sort_by_nth_word(sentence_list, nth, default_key="", reverse=False, case_sensitive=True): """ 按句子的第n个单词对列表进行排序 :param sentence_list: 待排序的句子列表 :param nth: 排序依据的单词位置,从1开始计数 :param default_key: 句子单词数不足nth时使用的默认排序值 :param reverse: 是否按降序排列,默认False为升序 :param case_sensitive: 是否区分大小写排序,默认True区分 """ def get_sort_key(s): words = s.split() if len(words) >= nth: key = words[nth-1] else: key = default_key return key if case_sensitive else key.lower() return sorted(sentence_list, key=get_sort_key, reverse=reverse) # 调用示例 input_list = ["The efgh ijk", "The abcd efgh", "The aab xyz"] output = sort_by_nth_word(input_list, nth=2) print(output)
注意事项
- 单词默认按任意空白字符分割,如果需要按指定分隔符(如单个空格、制表符)分割,可以调整
split()的入参,例如按单个空格分割用split(" ") - 如果需要忽略大小写排序,设置
case_sensitive=False即可 - 单词数不足指定位置的句子默认排在最前面,可通过修改
default_key调整排序优先级
内容的提问来源于stack exchange,提问作者Tanvir Ahmmed
相关产品推荐
相关产品推荐

