Как правильно отсортировать список элементов в Python? - PullRequest
0 голосов
/ 21 октября 2019

Я упорядочиваю список предметов, которые я заменяю новыми, но, изменяя буквы на эквивалентное число и затем упорядочивая его, он сокращает порядок и делает его по частям.

for (i) in range(len(unico)):
    if unico[i] == 'A':
        unico[i] = '14'
    elif unico[i] == 'D':
        unico[i] = '10'
    elif unico[i] == 'J':
        unico[i] = '11'
    elif unico[i] == 'Q':
        unico[i] = '12'
    elif unico[i] == 'K':
        unico[i] = '13'

for (i) in range(len(unico2)):
    if unico2[i] == 'A':
        unico2[i] = '14'
    elif unico2[i] == 'D':
        unico2[i] = '10'
    elif unico2[i] == 'J':
        unico2[i] = '11'
    elif unico2[i] == 'Q':
        unico2[i] = '12'
    elif unico2[i] == 'K':
        unico2[i] = '13'   

repetido, repetido2, unico, unico2 = 
    sorted(repetido, reverse=True), sorted(repetido2, reverse=True), 
    sorted(unico, reverse=True), sorted(unico2, reverse=True)

print (unico,unico2)

Я ожидал этого вывода:

['14', '13', '10','8','4','3'] ['14', '13', '12', '10', '7', '6', '5']

.. но вот что я получаю:

['8', '4', '3', '14', '13', '10'] ['7', '6', '5', '14', '13', '12', '10']

1 Ответ

0 голосов
/ 21 октября 2019

Ваш код Python ведет себя правильно. У вас есть список строк . Итак, sorted() сортирует список, сравнивая их в виде строки. Поскольку '8' больше, чем все остальные элементы, поэтому перед списком появляется значок.

Вам нужно сравнить элементы списка как целые числа. Вы можете передать key атрибут sort(), чтобы вернуть элемент как целое число, как это -

unico = ['3', '4', '8', '10', '14', '13']
unico.sort(key=lambda x: int(x), reverse=True)
print(unico)

Выход:

['14', '13','10', '8', '4', '3']

Код использует лямбда-функцию для преобразования строкового элемента в целое при сортировке, но сам элемент остается неизменным. Другое дело, что вы переопределяете свой список после сортировки. Таким образом, вы можете просто использовать sort() метод списка вместо sorted().

...