如何将Python列表中最长单词移至末尾并保持其余单词字母排序?
解决方法
核心思路
先把列表里的单词按长度分成两组:普通长度的单词、最长长度的单词。对普通单词做字母排序后,把最长单词追加到末尾,就能得到你要的结果。
完整代码示例
# 原始单词列表 list1 = ['beg', 'begs', 'big', 'bug', 'buggies', 'bugs', 'bus', 'egg', 'eggs', 'gig', 'sub', 'sue', 'use'] # 计算最长单词的长度 max_length = max(len(word) for word in list1) # 分离普通单词和最长单词 normal_words = [word for word in list1 if len(word) < max_length] longest_words = [word for word in list1 if len(word) == max_length] # 对普通单词按字母顺序排序 sorted_normal = sorted(normal_words) # 合并得到最终列表 result = sorted_normal + longest_words # 按要求格式输出 print('list1:', result)
代码说明
- 计算最长长度:用生成器表达式遍历所有单词的长度,找出最大值
max_length。 - 分组单词:通过列表推导式把单词分成两组,避免直接删除元素可能导致的遗漏(比如存在多个最长单词的情况)。
- 排序普通单词:
sorted()默认按字母顺序排序,正好满足需求。 - 合并列表:把排序后的普通单词和最长单词拼接,最长单词自然移到末尾。
处理多个最长单词的情况
如果列表里有多个长度相同的最长单词,比如假设列表还有'guppies',上面的代码会把所有最长单词都移到末尾,保留它们在原列表中的顺序。如果想让最长单词也按字母排序,只需把longest_words改成sorted(longest_words)即可。
你原有代码的问题
- 用
list作为变量名会覆盖Python内置的list类型,这是不规范的写法; - 你把排序后的完整列表和最长单词分开打印了,没有合并成一个整体列表,所以输出不符合预期。
内容的提问来源于stack exchange,提问作者sinyce
相关产品推荐
相关产品推荐

