How to sort a list by last character of string

2020-07-03 07:47发布

I am trying to write a program that orders a list of strings based on the last character in the item.

["Tiger 6", "Shark 4", "Cyborg 8"] are how my list is imported, but I need to put them in numerical order based on the numbers at the end.

4条回答
一夜七次
2楼-- · 2020-07-03 07:57
def last_letter(word):
    return word[::-1]

mylst = ["Tiger 6", "Shark 4", "Cyborg 8"]
sorted(mylst, key=last_letter)
查看更多
Bombasti
3楼-- · 2020-07-03 08:01
nums = ["Tiger 6", "Shark 4", "Cyborg 8"]
slist=sorted(nums,key = lambda x:x[-1])
  1. here nums is an list
  2. in slist it takes list of arguments from the list nums
  3. here lambda function takes argument from list and return it's last value(e.g. if it a first argument from nums (i.e.''Tiger 6'') and it returns 6.
  4. sorted function return a list based on lambda function.
查看更多
唯我独甜
4楼-- · 2020-07-03 08:03

I am trying to write a program that orders a list of strings based on the last character in the item.

>>> s = ["Tiger 6", "Shark 4", "Cyborg 8"]
>>> sorted(s, key=lambda x: int(x[-1]))
['Shark 4', 'Tiger 6', 'Cyborg 8']

Try this if there are more num of digits at the last.

>>> import re
>>> sorted(s, key=lambda x: int(re.search(r'\d+$',x).group()))
['Shark 4', 'Tiger 6', 'Cyborg 8']

re.search(r'\d+$',x).group() helps to fetch the number present at the last irrespective of preceding space.

查看更多
【Aperson】
5楼-- · 2020-07-03 08:09

If the numbers are not single digits, you can try -

>>> l = ["Tiger 6", "Shark 4", "Cyborg 8", "Temporary 12"]
>>> l.sort(key = lambda x: int(x.rsplit(' ',1)[1]))
>>> l
['Shark 4', 'Tiger 6', 'Cyborg 8', 'Temporary 12']

str.rsplit(s, n) function starts splitting the string at the end towards start of the string and stops after n splits. In the above case, it only splits the string once, at a space.

查看更多
登录 后发表回答