简体   繁体   English

如何从 Python 列表中找到最大的项目

[英]How to find greatest item from list in Python

I have below code:我有以下代码:

lst = ['2022-12-08 21:53:28.230556_54_12748.png', '2022-12-08 21:53:28.314088_86_14029.png', '2022-12-08 21:53:28.363581_72_12540.png', '2022-12-08 21:53:28.448268_65_13491.png', '2022-12-08 21:53:28.907252_50_7001.png', '2022-12-08 21:53:28.998206_55_13458.png', '2022-12-08 21:53:29.066905_60_8857.png', '2022-12-08 21:53:29.167242_54_8327.png', '2022-12-08 21:53:29.260880_52_11163.png', '2022-12-08 21:53:29.318770_52_7859.png', '2022-12-08 21:53:29.992619_51_7173.png', '2022-12-08 21:53:30.380722_55_7301.png', '2022-12-08 21:53:31.546448_59_7005.png', '2022-12-08 21:53:31.820877_53_6044.png', '2022-12-08 21:53:31.901512_51_5818.png', '2022-12-08 21:53:35.622028_56_7221.png', '2022-12-08 21:53:35.706456_72_7522.png', '2022-12-08 21:53:36.785644_53_8222.png', '2022-12-08 21:53:36.872902_60_10873.png', '2022-12-08 21:53:36.952308_59_10217.png', '2022-12-08 21:53:37.034774_57_7258.png', '2022-12-08 21:53:37.151830_52_7745.png', '2022-12-08 21:53:37.236664_80_13584.png', '2022-12-08 21:53:37.401254_70_13281.png', '2022-12-08 21:53:37.485339_91_16176.png', '2022-12-08 21:53:37.564524_74_13113.png', '2022-12-08 21:53:37.652097_90_13526.png', '2022-12-08 21:53:37.729431_82_13303.png', '2022-12-08 21:53:37.777823_66_12084.png', '2022-12-08 21:53:37.857692_72_14855.png', '2022-12-08 21:53:37.939566_72_16755.png', '2022-12-08 21:53:38.017759_65_13656.png', '2022-12-08 21:53:38.098182_59_14190.png', '2022-12-08 21:53:38.180636_55_13150.png', '2022-12-08 21:53:38.261705_54_11044.png', '2022-12-08 21:53:38.346376_67_11908.png', '2022-12-08 21:53:38.586157_59_11200.png', '2022-12-08 21:53:38.715544_64_10425.png', '2022-12-08 21:53:38.837041_64_12068.png', '2022-12-08 21:53:38.924294_77_13531.png', '2022-12-08 21:53:39.008601_60_10283.png', '2022-12-08 21:53:39.174924_60_10160.png', '2022-12-08 21:53:39.256190_65_10555.png', '2022-12-08 21:53:39.340980_63_10775.png']

runOnce = True
highCon = 0
for img in lst:
    tmp = img.split("_")
    con = tmp[1]
    if runOnce:
        highCon = con
        runOnce = False
    else:
        if con > highCon:
            highCon = con

print(highCon)

lst is a list containing list of filenames. lst是一个包含文件名列表的列表。 Filename consist of datetime_score_area.png .文件名由datetime_score_area.png组成。 From the list I have to find the first and second highest score of a file and print it.我必须从列表中找到文件的第一和第二高分并打印出来。 With above code I am able to print the highest filename but not sure how to find the second highest filename.使用上面的代码,我能够打印最高的文件名,但不确定如何找到第二高的文件名。

What can I try next?接下来我可以尝试什么?

Write a function that isolates the score and converts to int.编写一个函数来隔离分数并转换为 int。 You can then use this as the key to sorted() as follows:然后,您可以将其用作sorted(),如下所示:

lst = ['2022-12-08 21:53:28.230556_54_12748.png', '2022-12-08 21:53:28.314088_86_14029.png', '2022-12-08 21:53:28.363581_72_12540.png', '2022-12-08 21:53:28.448268_65_13491.png', '2022-12-08 21:53:28.907252_50_7001.png', '2022-12-08 21:53:28.998206_55_13458.png', '2022-12-08 21:53:29.066905_60_8857.png', '2022-12-08 21:53:29.167242_54_8327.png', '2022-12-08 21:53:29.260880_52_11163.png', '2022-12-08 21:53:29.318770_52_7859.png', '2022-12-08 21:53:29.992619_51_7173.png', '2022-12-08 21:53:30.380722_55_7301.png', '2022-12-08 21:53:31.546448_59_7005.png', '2022-12-08 21:53:31.820877_53_6044.png', '2022-12-08 21:53:31.901512_51_5818.png', '2022-12-08 21:53:35.622028_56_7221.png', '2022-12-08 21:53:35.706456_72_7522.png', '2022-12-08 21:53:36.785644_53_8222.png', '2022-12-08 21:53:36.872902_60_10873.png', '2022-12-08 21:53:36.952308_59_10217.png', '2022-12-08 21:53:37.034774_57_7258.png', '2022-12-08 21:53:37.151830_52_7745.png', '2022-12-08 21:53:37.236664_80_13584.png', '2022-12-08 21:53:37.401254_70_13281.png', '2022-12-08 21:53:37.485339_91_16176.png', '2022-12-08 21:53:37.564524_74_13113.png', '2022-12-08 21:53:37.652097_90_13526.png', '2022-12-08 21:53:37.729431_82_13303.png', '2022-12-08 21:53:37.777823_66_12084.png', '2022-12-08 21:53:37.857692_72_14855.png', '2022-12-08 21:53:37.939566_72_16755.png', '2022-12-08 21:53:38.017759_65_13656.png', '2022-12-08 21:53:38.098182_59_14190.png', '2022-12-08 21:53:38.180636_55_13150.png', '2022-12-08 21:53:38.261705_54_11044.png', '2022-12-08 21:53:38.346376_67_11908.png', '2022-12-08 21:53:38.586157_59_11200.png', '2022-12-08 21:53:38.715544_64_10425.png', '2022-12-08 21:53:38.837041_64_12068.png', '2022-12-08 21:53:38.924294_77_13531.png', '2022-12-08 21:53:39.008601_60_10283.png', '2022-12-08 21:53:39.174924_60_10160.png', '2022-12-08 21:53:39.256190_65_10555.png', '2022-12-08 21:53:39.340980_63_10775.png']

def score(s):
    return int(s.split('_')[1])

print(*sorted(lst, key=score)[-2:], sep='\n')

Output:输出:

2022-12-08 21:53:37.652097_90_13526.png
2022-12-08 21:53:37.485339_91_16176.png

Note:笔记:

You could use a lambda expression for the key but this is my preference您可以使用 lambda 表达式作为,但这是我的偏好

You can sort the list first:您可以先对列表进行排序:

lst = ['2022-12-08 21:53:28.230556_54_12748.png', '2022-12-08 21:53:28.314088_86_14029.png', '2022-12-08 21:53:28.363581_72_12540.png', '2022-12-08 21:53:28.448268_65_13491.png', '2022-12-08 21:53:28.907252_50_7001.png', '2022-12-08 21:53:28.998206_55_13458.png', '2022-12-08 21:53:29.066905_60_8857.png', '2022-12-08 21:53:29.167242_54_8327.png', '2022-12-08 21:53:29.260880_52_11163.png', '2022-12-08 21:53:29.318770_52_7859.png', '2022-12-08 21:53:29.992619_51_7173.png', '2022-12-08 21:53:30.380722_55_7301.png', '2022-12-08 21:53:31.546448_59_7005.png', '2022-12-08 21:53:31.820877_53_6044.png', '2022-12-08 21:53:31.901512_51_5818.png', '2022-12-08 21:53:35.622028_56_7221.png', '2022-12-08 21:53:35.706456_72_7522.png', '2022-12-08 21:53:36.785644_53_8222.png', '2022-12-08 21:53:36.872902_60_10873.png', '2022-12-08 21:53:36.952308_59_10217.png', '2022-12-08 21:53:37.034774_57_7258.png', '2022-12-08 21:53:37.151830_52_7745.png', '2022-12-08 21:53:37.236664_80_13584.png', '2022-12-08 21:53:37.401254_70_13281.png', '2022-12-08 21:53:37.485339_91_16176.png', '2022-12-08 21:53:37.564524_74_13113.png', '2022-12-08 21:53:37.652097_90_13526.png', '2022-12-08 21:53:37.729431_82_13303.png', '2022-12-08 21:53:37.777823_66_12084.png', '2022-12-08 21:53:37.857692_72_14855.png', '2022-12-08 21:53:37.939566_72_16755.png', '2022-12-08 21:53:38.017759_65_13656.png', '2022-12-08 21:53:38.098182_59_14190.png', '2022-12-08 21:53:38.180636_55_13150.png', '2022-12-08 21:53:38.261705_54_11044.png', '2022-12-08 21:53:38.346376_67_11908.png', '2022-12-08 21:53:38.586157_59_11200.png', '2022-12-08 21:53:38.715544_64_10425.png', '2022-12-08 21:53:38.837041_64_12068.png', '2022-12-08 21:53:38.924294_77_13531.png', '2022-12-08 21:53:39.008601_60_10283.png', '2022-12-08 21:53:39.174924_60_10160.png', '2022-12-08 21:53:39.256190_65_10555.png', '2022-12-08 21:53:39.340980_63_10775.png']
lst.sort(key= lambda x: int(x.split("_")[1]),reverse=True)
print(lst[0]) # Highest score filename
print(lst[1]) # Second highest filename

If you don't want to change the order of the original list you can use sorted as well:如果您不想更改原始列表的顺序,您也可以使用 sorted:

highest, nxt_highest = sorted(lst, key=lambda x: int(x.split("_")[1]),reverse=True)[:2]

Code:代码:

sorted([int(l.split('_')[1]) for l in lst], reverse=True)[:2] ## [91, 90]

If "highest" means alphabetical, a simple sort would suffice:如果“最高”意味着按字母顺序排列,那么简单的sort就足够了:

lst.sort(reverse=True)
print(lst[0]) # highest
print(lst[1]) # second highest

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM