Tenho uma lista de sequências de cinco caracteres, cada sequência representando uma mão de cinco cartas de baralho. Quero classificar cada sequência para que fique em ordem crescente por número, seguido pelas cartas (T, J, Q, K, A). Então, “Q4JTK”, "9T43A" e “T523Q” serão classificados como “4TJQK”, "349TA" e “235TQ”, respectivamente. Posso classificar uma sequência numérica de cinco caracteres usando:
def sort_string(s):
return ''.join(sorted(s))
print(sort_string("21437"))
Mas como classificar uma string com números e letras? Eu provavelmente acharia uma função regular mais fácil de seguir do que uma função lambda. Obrigado.
Classificando por índice na ordem desejada:
Tente isso online!
O problema que você está vendo é que o sorted() do Python em strings com números e letras, classifica cada caractere por seu valor ASCII (letras maiúsculas virão antes dos números), o que não é como os cards funcionariam quando classificados. Para consertar isso sem uma expressão lambda para que seja mais fácil de seguir, seria fazer algo como mapear cada caractere para uma classificação (por exemplo, 'A" : 1, '2': 2, etc...)
Então aqui, sorted() aceita outro parâmetro opcional - a função key. E então classifica a string com base na classificação da carta atribuída.
Se for difícil entender como sorted() pode funcionar, anexei a documentação aqui
https://www.programiz.com/python-programming/methods/built-in/sorted
Boa sorte!