Python 如何最大限度地利用;hh:mm";时间戳?

Python 如何最大限度地利用;hh:mm";时间戳?,python,python-3.x,list,max,Python,Python 3.x,List,Max,我有一个时间字符串列表(音乐曲目长度),如下所示: 音乐长度=['4:30','4:59','7:30',…] 我如何才能找到该列表的最大值(最长曲目)?您可以简单地使用sorted()这样做(仅分钟): x = [int(element.replace(':','')) for element in music_lengths] max(x) 对于更精确的分秒进近时间模块应按中所述使用,或手动计算至秒: >>> sorted(music_lengths, key=lamb

我有一个时间字符串列表(音乐曲目长度),如下所示:

音乐长度=['4:30','4:59','7:30',…]
我如何才能找到该列表的最大值(最长曲目)?

您可以简单地使用
sorted()
这样做(仅分钟):

x = [int(element.replace(':','')) for element in music_lengths]
max(x)
对于更精确的分秒进近
时间
模块应按中所述使用,或手动计算至秒:

>>> sorted(music_lengths, key=lambda item: int(item.split(':')[0]) * 60 + int(item.split(':')[1]))
['0:01', '4:30', '4:59', '7:30']

您可以简单地使用
sorted()
进行如下操作(仅限分钟):

对于更精确的分秒进近
时间
模块应按中所述使用,或手动计算至秒:

>>> sorted(music_lengths, key=lambda item: int(item.split(':')[0]) * 60 + int(item.split(':')[1]))
['0:01', '4:30', '4:59', '7:30']

您可以使用转换为
time
对象,并根据这些值获取最大值:

导入时间
音乐长度=['4:30','11:04','4:59','7:30','1:23']
最长=最大(音乐长度,键=lambda t:time.strtime(t,'%M:%S'))
打印(最长)
输出(用于我的示例数据)

11:04

您可以使用转换为
时间
对象,并根据这些值获取最大值:

导入时间
音乐长度=['4:30','11:04','4:59','7:30','1:23']
最长=最大(音乐长度,键=lambda t:time.strtime(t,'%M:%S'))
打印(最长)
输出(用于我的示例数据)

11:04

或者您可以尝试使用熊猫,如下所示:

import pandas as pd
if __name__ == '__main__':
    music_lengths = ["4:30", "4:59", "7:30", "3:25"]
    df = pd.DataFrame(music_lengths, columns=["length"])
    df["length"]= pd.to_datetime(df["length"], format="%H:%M").dt.time
    print(df.max())
该代码将字符串列转换为datetime列,并仅输出时间部分。我使用了“%H:%M”格式,因为问题表明格式为“hh:mm”

结果:

07:30:00

或者你可以试着用熊猫,如下所示:

import pandas as pd
if __name__ == '__main__':
    music_lengths = ["4:30", "4:59", "7:30", "3:25"]
    df = pd.DataFrame(music_lengths, columns=["length"])
    df["length"]= pd.to_datetime(df["length"], format="%H:%M").dt.time
    print(df.max())
该代码将字符串列转换为datetime列,并仅输出时间部分。我使用了“%H:%M”格式,因为问题表明格式为“hh:mm”

结果:

07:30:00

这可能有点长,但只是为了多样性:

>>> music_lengths = ['4:30', '4:59', '7:30', '11:40', '0:30', '22:45', 
'7:31', '12:40']
>>> 
 >>> sorted(music_lengths, key=lambda x: list(map(int, x.split(':'))))[-1]
'22:45'

这可能有点长,但只是为了多样性:

>>> music_lengths = ['4:30', '4:59', '7:30', '11:40', '0:30', '22:45', 
'7:31', '12:40']
>>> 
 >>> sorted(music_lengths, key=lambda x: list(map(int, x.split(':'))))[-1]
'22:45'

这将把
11:04
排序为小于
7:30
注意这将注意返回原始值请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,并且更有可能吸引更多的选票。这将把
11:04
排序为小于
7:30
注意这将注意返回原始值请不要只将代码作为答案发布,但也要解释一下你的代码是做什么的,以及它是如何解决问题的。带解释的答案通常更有帮助,质量更好,更有可能吸引更多的选票。对于以“需要更多关注”投票结束的人,你可能应该为此阅读解释性文本。它是用来处理一个问题中有很多不同的问题。我不认为它适用于这种情况下,除非你考虑删除结肠,并找到最大的是非常不同的问题,我个人觉得很难证明:-)帕克迪布洛,我宁愿投票给DUP。它是用来处理一个问题中有很多不同的问题。我不认为它适用于这种情况下,除非你考虑删除结肠,并找到最大的是非常不同的问题,我个人觉得很难证明:-)帕克迪布洛,我宁愿投票给DUP。第一个建议是错误的。它只是按分钟排序。如果音乐长度
['4:59','4:30','7:30','0:01']
?4:59将在4:30之前排序。第二个建议丢失了输入的字符串格式-您需要将其转换回来。第一个建议是错误的。它只是按分钟排序。如果音乐长度
['4:59','4:30','7:30','0:01']
?4:59将在4:30之前排序。第二个建议将丢失输入的字符串格式-您需要将其转换回。fornat规范应为
“%M:%S”
,以将持续时间字符串的第一部分视为分钟,而不是月份。否则持续时间>=
13:00
将失败。@mHowke感谢您指出这一点,我的手指一定是从
m
的shift键上滑下的,因为我的持续时间不够长,所以我没有注意到。我已更正。fornat规范应为
“%M:%S”
,以将持续时间字符串的第一部分视为分钟,而不是月份。否则持续时间>=
13:00
将失败。@mHowke感谢您指出这一点,我的手指一定是从
m
的shift键上滑下的,因为我的持续时间不够长,所以我没有注意到。我已经改正了。