75102


時刻を表現した文字列を、0時からの経過分数に変更したいと思っています。  
具体的には `11:15`であれば、`11 * 60 + 15 = 675` という結果を得たいです。

[code]

    a = ‘11:15’
    tmp = a.split(‘:’)
    result = int(tmp[0]) * 60 + int(tmp[1])
    
[/code]

と書いてみましたが、ここで使用するためだけに一時的に変数に置くのも面倒かなと思いました。何かいい方法ありますでしょうか？


CC BY-SA 4.0
2021-04-05T09:56:47.263
75097
2021-04-05T13:00:27.813
2021-04-05T13:00:27.813
7290
44556
question
python python3
splitで分割した結果をすぐに使用したい（一時的に変数に入れないでも利用できるか）


`split()`で文字列として分割するのでは無く、時間/時刻に関する情報として処理する方法も考えられます。

[code]

    from datetime import *
    midnight = datetime.strptime('00:00','%H:%M')
    
    a = '11:15'
    result = int((datetime.strptime(a,'%H:%M') - midnight).total_seconds() / 60)
    
    print(result)
    
[/code]


CC BY-SA 4.0
2021-04-05T10:58:40.500
75098
2021-04-05T10:58:40.500
26370
75097
answer


lambda を使うというアイデアで：

[code]

    a = '11:15'
    print((lambda tmp: int(tmp[0]) * 60 + int(tmp[1]))(a.split(':')))
    
[/code]

一応、tmp を lambda 内のローカル変数に閉じ込めただけの形なのですが、グローバルな名前空間は汚さなくて済むということでよければ。


CC BY-SA 4.0
2021-04-05T12:12:12.293
75099
2021-04-05T12:58:50.830
2021-04-05T12:58:50.830
7290
7290
75097
answer


`str.split()` したものをリスト内包表記で処理するのも何かと面倒そうなので  
@kunif 氏の回答同様, `datetime` を使った方法です

[code]

    from datetime import timedelta,datetime
    
    timedelta(**dict(zip(('hours', 'minutes', 'seconds'),
                         datetime.strptime('11:15', '%H:%M').timetuple()[3:6]))
             ).seconds /60
    
[/code]

* * *

`datetime.strptime().timetuple()[3:6]` によって, 時, 分, 秒(念の為) の `tuple` を取り出し  
`timedelta` のキーワード引数として, キーワードと共に与え  
そこから全体の秒数を取り出して 60で割って「分」に直してます  
(ていうか長いな…)

* * *

(追記)

`datetime`版の前に試した, pandas版も記しときます

[code]

    import pandas as pd
    print(pd.to_timedelta('11:15' + ':00').seconds/60)
    
[/code]


CC BY-SA 4.0
2021-04-05T12:22:12.490
75100
2021-04-05T12:35:16.270
2021-04-05T12:35:16.270
43025
43025
75097
answer

[code]

    a = '11:15'
    result = (lambda h,m: int(h)*60 + int(m))(*a.split(':'))
    print(result)  # 675
    
[/code]


CC BY-SA 4.0
2021-04-05T12:36:52.540
75102
2021-04-05T12:36:52.540
41756
75097
answer