Как найти наибольшее число из списка строк с Python - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь исправить мой скрипт на python, который сканирует существующие аниме-шоу с моих дисков, а затем создает список, в котором есть только самый последний эпизод, включая имя шоу.

Затем позже я использую этот списокочистить межсетевые страницы, чтобы увидеть, доступны ли новые эпизоды для просмотра.

Некоторое время мой сценарий работал, но он столкнулся с проблемой, когда номер эпизода достигает 99 или 100, в зависимости от того, как вы на него смотрите..

Ниже приведен фрагмент кода, который я использую для группировки аниме-шоу и получения номера последнего эпизода для каждого шоу.

ниже показан фрагмент списка sorted_list, используемый в коде:

sorted_list= [
'Bakumatsu Crisis - 11'
'Bakumatsu Crisis - 12'
'Black Clover - 100'
'Black Clover - 99'
'Black Clover - 98'
'Black Clover - 97'
 ]
    latest_list = []
    get_series = itertools.groupby(sorted_list, lambda x: x.split('-')[0])
    find_max = [(series, max(list(episode), key=lambda x: x.split('-'))) for series, episode in get_series]
    for line in find_max:
        latest_list.append(line[1])
    return latest_list

Возвращенный "last_list" выглядит так:

latest_list= [
'Bakumatsu Crisis - 12'
'Black Clover - 99'
 ]

Когда я ожидаю, что он вернется:

 latest_list= [
'Bakumatsu Crisis - 12'
'Black Clover - 100'
 ]

Я не могу понять это, мойсамостоятельно.Я попытался отсортировать «sorted_list» с помощью python sorted_list.sort(), но он ничего не делает.

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

Ваша лучшая ставка здесь - перестать использовать список и начать использовать словарь.Словари - это более или менее json внутри python, и вы можете присваивать значения именам внутри него и вызывать эти значения.Так что для этого случая вы должны сделать:

anime_dict = {
    'Black Clover' : 100,
    'Bakumatsu Crisis' : 12
    }

sorted_dict = sorted(anime_dict.items(), key=lambda kv: kv[1])

и это вернет

[('Bakumatsu Crisis', 12), ('Black Clover', 100)]

, тогда, если вы хотите напечатать их так, как они хранятся здесь, просто сделайте:

sorted_dict=dict(sorted_dict) # forgot to mention that prior to this being called, it will be a tuple, my bad
for anime in sorted_dict:
    print(anime, '-', sorted_dict[anime])

между прочим: отступить, улетает далеко в небо, черный ровер

1 голос
/ 22 сентября 2019

Во-первых, вам нужно разделить на ' - ', а не '-' (потому что это то, что отделяет имя серии от номера эпизода в ваших строках), и вам нужно отсортировать по int(x.split(' - ')[1]), иначе это будетномера эпизодов в виде строк, а не чисел (вот почему '99' > '100'):

get_series = itertools.groupby(sorted_list, lambda x: ' - '.join(x.split(' - ')[:-1]))
find_max = [(series, max(episode, key=lambda x: int(x.split(' - ')[-1]))) for series, episode in get_series]
for line in find_max:
    latest_list.append(line[1])
print(latest_list)

Вывод:

['Bakumatsu Crisis - 12', 'Black Clover - 100']

Однако я предлагаю вам использовать другую структуру данных (например,как диктовку) или определите свои собственные классы, чтобы лучше организовывать и манипулировать вашими данными, а не так запутанно.

...