我有一個非常大的時間戳串列。這是一個示例:
time_str = ["23:00", "11:00", "1:00", "5:00", "7:00"]
我試圖遍歷串列元素,將每個元素轉換為日期時間,然后比較兩個后續元素,如果后一個時間戳小于前一個,則將一天添加到后一個。
這是我寫的,但似乎不起作用:
from datetime import datetime, timedelta
time_str = ["23:00", "11:00", "1:00", "5:00", "7:00"]
time_date_lst = []
elem = 0
early = datetime.strptime(time_str[0], "%H:%M")
while elem <= len(time_str)-2:
early = datetime.strptime(time_str[elem], "%H:%M")
later = datetime.strptime(time_str[elem 1], "%H:%M")
if later < early:
later = timedelta(days=1)
time_date_lst.append(early)
time_date_lst.append(later)
elem = 1
print(time_date_lst)
[datetime.datetime(1900, 1, 1, 23, 0), datetime.datetime(1900, 1, 2, 11, 0), datetime.datetime(1900, 1, 1, 11, 0), datetime.datetime(1900, 1, 2, 1, 0), datetime.datetime(1900, 1, 1, 1, 0), datetime.datetime(1900, 1, 1, 5, 0), datetime.datetime(1900, 1, 1, 5, 0), datetime.datetime(1900, 1, 1, 7, 0)]
uj5u.com熱心網友回復:
我稍微改變了方法。
首先,在進入任何回圈之前,我將所有字串時間直接轉換為日期時間。
while 回圈被 for 回圈取代。
不會創建輔助串列,因為否則您的第三個元素例如不會考慮您向第二個元素添加天數等。我們修改給定的串列。
from datetime import datetime, timedelta
# Base data converted to datetime before any processing.
time_str = ["23:00", "11:00", "1:00", "5:00", "7:00"]
time_str = [datetime.strptime(x, "%H:%M") for x in time_str]
for n in range(len(time_str) - 1):
early = time_str[n]
later = time_str[n 1]
while later < early:
later = timedelta(days=1) # Add as many days as needed.
time_str[n 1] = later # Store the modified date in the list.
print("\n".join(map(str, time_str)))
# 1900-01-01 23:00:00
# 1900-01-02 11:00:00
# 1900-01-03 01:00:00
# 1900-01-03 05:00:00
# 1900-01-03 07:00:00
uj5u.com熱心網友回復:
查看您的代碼...因此您選擇兩個專案(早期和后期),然后比較它們并將它們都附加到串列中。例如,您比較 23:00 和 11:00,并在將一天添加到 11:00 后將兩者添加到串列中。接下來,您比較 11:00 和 1:00,問題是您已經添加了 11:00,但是您又將其附加到 1:00。
我將您的 while 回圈修改為 for 回圈,下面的代碼執行我認為您想要的操作。
HOUR_MIN_FORMAT = "%H:%M"
time_str = ["23:00", "11:00", "1:00", "5:00", "7:00", '3:00']
time_date_lst = []
time = datetime.strptime(time_str[0], "%H:%M")
time_date_lst.append(time)
for index, time in enumerate(time_str):
if index == len(time_str)-1:
break
time = datetime.strptime(time, "%H:%M")
next_time = datetime.strptime(time_str[index 1], "%H:%M")
if next_time < time:
next_time = timedelta(days=1)
#time_date_lst.append(time)
time_date_lst.append(next_time)
print(time_date_lst)
>> [datetime.datetime(1900, 1, 1, 23, 0), datetime.datetime(1900, 1, 2, 11, 0), datetime.datetime(1900, 1, 2, 1, 0), datetime.datetime(1900, 1, 1, 5, 0), datetime.datetime(1900, 1, 1, 7, 0), datetime.datetime(1900, 1, 2, 3, 0)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/347416.html
上一篇:根據元素的值將串列拆分為子串列?
