在字符串中我有數據,表示正在運行的比賽時間。 例如,我有一個字符串,我想比較0,我想打印最接近他們的字符串。比較python中的三個字符串
錄入時間:那段時間之間37:30
字符串:37:31 and 36:50
所以我想打印出來37:31
。
我的條件是錯誤的,因爲它打印36:50
for i in list:
if i <= time:
print i
break
我不想字符串轉換爲秒。
在字符串中我有數據,表示正在運行的比賽時間。 例如,我有一個字符串,我想比較0,我想打印最接近他們的字符串。比較python中的三個字符串
錄入時間:那段時間之間37:30
字符串:37:31 and 36:50
所以我想打印出來37:31
。
我的條件是錯誤的,因爲它打印36:50
for i in list:
if i <= time:
print i
break
我不想字符串轉換爲秒。
你可以改變你的列表中漂浮,然後找到最小差異。但正如BoarGules所說,你不能以這種方式比較字符串。
這裏你可以做什麼的例子:
>>> list
['37:30', '36:51', '37:29']
>>> time
'37:28'
>>> list2=[float('.'.join(i.split(':'))) for i in list]
>>> time2=float('.'.join(time.split(':')))
>>> min(list2, key=lambda x:abs(x-time2))
37.29
編輯
>>> list=['12:37:21', '11:23:15', '12:37:28']
>>> time='11:24:12'
>>> list2=[int(''.join(i.split(':'))) for i in list]
>>> time2=int(''.join(time.split(':')))
>>> out=str(min(list2, key=lambda x:abs(x-time2)))
>>> out=out[:2]+':'+out[2:4]+':'+out[4:]
>>> out
'11:23:15'
給定時間格式的很好的簡短解決方案。但如果我有......:mm:ss格式,它不能轉換爲浮點數 –
@KubaRonkiewicz在我的文章中查看編輯 – Dadep
您的測試失敗,因爲它報告第一次發現它更少,而不是最近的。
不想轉換爲秒是一個問題。您需要最小的距離,並且需要計算輸入時間和候選時間之間的差異。沒有簡單的方法來計算兩個字符串之間的差異,它們將按照您的要求進行。有什麼反對做轉換?
爲什麼我不想進行轉換?因爲我對不同的距離有不同的時間格式(hh:mm:ss,mm:ss,ss.ms),所以我需要編寫更多if/else條件。 –
不轉換爲秒,您可以比較字符串,但無法計算它們之間的差異。對於你的情況,差異是相關的,因爲你想打印最近的時間。這樣做:
def convert(string):
min, sec = string.split(':')
return min*60 + sec
假設你list
是按升序排序,請執行下列檢查:
for i in range(len(list)):
if list[i] > time:
if i == 0: # the very first string is greater, so it's also the closest
print(list[i])
break
diff1 = convert(time) - convert(list[i-1])
diff2 = convert(list[i]) - convert(time)
if diff1 < diff 2: # lis[i-1] is closer
print(list[i-1])
else:
print(list[i])
break
請提供[最小,完整,可驗證的示例](https://stackoverflow.com/幫助/ mcve) – klutt