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

2024-04-19 11:03:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

输入:

 ['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...

Tags: 字符串列表排序etc字符afroalbaaida
0条回答
网友
1楼 · 发布于 2024-04-19 11:03:56

使用一个函数,该函数接受一个字符串并将最后两个字符的子字符串作为keyin sort函数返回。你知道吗

data.sort(key= lambda x : x[-2:])
网友
2楼 · 发布于 2024-04-19 11:03:56

在一行中,您可以尝试:

利用元组排序技巧:

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']

Detailed solution:

以上列表理解如下:

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)
网友
3楼 · 发布于 2024-04-19 11:03:56

这确实是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:])

或不带λ的等效物:

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

sorted(l, key = func)

但是有了一个函数,你也可以在不损失可读性的情况下构建更多的逻辑。 例如,决定如何处理长度不是4的单词。你知道吗

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

您还可以选择使用:

  1. 排序(list)#创建已排序列表的副本
  2. 你知道吗列表.排序()#对列表本身进行排序

相关问题 更多 >