我有一个像下面这样的持续时间列表
['5d', '20h', '1h', '7m', '14d', '1m']
Run Code Online (Sandbox Code Playgroud)
其中d代表天,h代表小时,m代表分钟。
我想从这个列表中获得最长的持续时间(14d在这种情况下)。我怎样才能从这个字符串列表中得到它?
Nic*_*ais 15
np.argmax在pd.to_timedelta:
import numpy as np
import pandas as pd
durations = ['5d', '20h', '1h', '7m', '14d', '1m']
durations[np.argmax(pd.to_timedelta(durations))]
Run Code Online (Sandbox Code Playgroud)
Out[24]: '14d'
Run Code Online (Sandbox Code Playgroud)
pd.to_timedelta将字符串转换为持续时间 ( source ),并np.argmax返回最高元素的索引。
Fil*_*ski 12
纯python解决方案。我们可以存储我们的时间扩展 ( m, h, d) 和分钟 (here time_map)之间的映射,以找到最长的持续时间。这里我们使用max()withkey参数来应用我们的映射。
inp = ['5d', '20h', '1h', '7m', '14d', '1m']
time_map = {'m': 1, 'h': 60, 'd': 24*60}
print(max(inp, key=lambda x:int(x[:-1])*time_map[x[-1]])) # -> 14d
Run Code Online (Sandbox Code Playgroud)
这是一个绝对的技巧,它以一种糟糕但聪明的方式解决了这个问题:Pythonmin和max函数可以与key用于比较元素的函数一起使用,以便它返回最小化或最大化该函数的元素。如果key函数返回一个元组,那么顺序由元组的第一个组件决定,使用第二个组件作为决胜局。
我们可以利用最后一个字符'd','h'和'm'可以按字母顺序进行比较的事实;一d AY长于一个ħ我们的比长米inute。这意味着最长的持续时间具有按字母顺序排列的最小字符,最大整数作为决胜局。最大化该整数与最小化其否定相同:
>>> durations = ['5d', '20h', '1h', '7m', '14d', '1m']
>>> min(durations, key=lambda d: (d[-1], -int(d[:-1])))
'14d'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |