如何按最后两个字符排序字符串列表
输入:
['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...
答案 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 ''
您还可以选择使用:
答案 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)