如何从 python 的字符串列表中找到最大数字

How to find highest number from list of strings with python

我正在尝试修复我的 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

returned "latest_list" 看起来像这样:

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

当我期待它时 return:

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

我自己搞不懂。我试过用 pythonsorted_list.sort() 对 "sorted_list" 进行排序,但它没有做任何事情。

首先,您需要按 ' - ' 而不是 '-' 进行拆分(因为这是将系列名称与字符串中的剧集编号分开的方式),并且您需要按 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']

但是,我建议您要么使用其他数据结构(例如字典),要么定义您自己的 类 以更好地组织和操作您的数据,而不是像这样让事情变得混乱。

这里最好的办法是停止使用列表,而开始使用字典。字典或多或少在 python 内 json,您可以为其中的名称赋值并调用这些值。 所以对于这种情况你应该这样做:

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

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

这会 return

[('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])

顺便说一句:后退,远离天空,黑色漫游者