gpt4 book ai didi

python - 根据最后 3 个字符对文本进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:09 25 4
gpt4 key购买 nike

我正在使用 sorted() 函数根据最后一个字符对文本进行排序效果很好

def sort_by_last_letter(strings):
def last_letter(s):
return s[-1]
return sorted(strings,key=last_letter)

print(sort_by_last_letter(["hello","from","last","letter","a"]))

输出

['a', 'from', 'hello', 'letter', 'last']

我的要求是根据最后的第 3 个字符进行排序。但问题是很少有单词少于 3 个字符,在这种情况下,它应该根据下一个位置较低的字符(如果存在则为 2,否则为最后)进行排序。搜索要执行的操作它以 pythonic 方式

目前我得到

IndexError: 字符串索引超出范围

def sort_by_last_letter(strings):
def last_letter(s):
return s[-3]
return sorted(strings,key=last_letter)

print(sort_by_last_letter(["hello","from","last","letter","a"]))

最佳答案

您可以使用:

return sorted(strings,key=<b>lambda x: x[max(0,len(x)-3)]</b>)

因此我们首先计算字符串len(x) 的长度并从中减去3。如果字符串不是那么长,我们将因此获得一个负索引,但是通过使用 max(0,..) 我们可以防止这种情况发生,因此取最后一个字符,或最后一个字符如果这些不存在。

如果每个字符串至少有一个字符,这将起作用。这将产生:

>>> sorted(["hello","from","last","letter","a"],key=lambda x: x[max(0,len(x)-3)])
['last', 'a', 'hello', 'from', 'letter']

如果您不关心决胜局(换句话说,如果 'a''abc' 可以重新排序) ,你可以使用更优雅的方法:

from operator import itemgetter

return sorted(strings,key=itemgetter(slice(-3,None)))

我们在这里做的是用最后三个字符生成一个切片,然后比较这些子字符串。然后生成:

>>> sorted(strings,key=itemgetter(slice(-3,None)))
['a', 'last', 'hello', 'from', 'letter']

因为我们比较:

   ['a', 'last', 'hello', 'from', 'letter']
# ['a', 'ast', 'llo', 'rom', 'ter'] (comparison key)

关于python - 根据最后 3 个字符对文本进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45533232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com