如何按字母结尾对单词列表进行排序?

时间:2017-11-16 12:32:38

标签: python sorting

如何按最后两个字符排序字符串列表

输入:

 ['abby', 'acts', 'aden', 'afro', 'agni', 'agra', 'aida', 'ainu', 'alba', 'aldo', 'alec', 'alex', 'alma', 'alpo', 'alps', 'alta', 'alva', 'amie', 'amos']

输出:

**aa
**ab
**ac
**ad
**ae
**af
**ag
**ah
**ai
**aj
**ak
**al
**am
**an
**ao
**ap
**aq
**ar
**as
**at
**au
**av
**aw
**ax
**ay
**az
etc...
**ba
**ca
**da
**ea
**fa
**ga
etc...

3 个答案:

答案 0 :(得分:2)

使用一个带字符串的函数,并将最后两个字符子字符串作为key函数中的sort返回。

data.sort(key= lambda x : x[-2:])

答案 1 :(得分:1)

这确实是lambda变得有用的地方。如果您不了解lambda,请让本示例为您解释:

l =  ['abby', 'acts', 'aden', 'afro', 'agni', 'agra', 'aida', 'ainu', 'alba', 'aldo', 'alec', 'alex', 'alma', 'alpo', 'alps', 'alta', 'alva', 'amie', 'amos']

现在你可以做到:

sorted(l, key = lambda x: x[-2:])

或没有lambda的等价物:

def func(x):
    return x[-2:]

sorted(l, key = func)

但是通过一个功能,您可以构建更多逻辑而不会丢失可读性。 例如,决定如何处理长度不超过4的单词。

def func(x):
    if len(x) == 4:
        return x[-2:]
    else:
        return ''

您还可以选择使用:

  1. sorted(list)#创建已排序的列表的副本
  2. list.sort()#对列表本身进行排序

答案 2 :(得分:0)

您可以尝试一行:

利用元组排序技巧:

list_1=['abby', 'acts', 'aden', 'afro', 'agni', 'agra', 'aida', 'ainu', 'alba', 'aldo', 'alec', 'alex', 'alma', 'alpo', 'alps',
 'alta', 'alva', 'amie', 'amos']


print([sub_item[1] for sub_item in sorted([(item[-2:],item) for item in list_1])])

输出:

['alba', 'abby', 'aida', 'aldo', 'alec', 'aden', 'alex', 'amie', 'alma', 'agni', 'ainu', 'amos', 'alpo', 'alps', 'agra', 'afro', 'alta', 'acts', 'alva']
  

详细解决方案:

以上列表理解与:

相同
sub_list=[]
for item in list_1:
    sub_list.append((item[-2:],item))

final_list=[]
for sub_item in sorted(sub_list):

    final_list.append(sub_item[1])
print(final_list)