javascript - python小算法
問(wèn)題描述
有個(gè)日期字符串list,如下:
lst = [’2017-06-01’, ’2017-06-08’, ’2017-06-15’, ’2017-06-22’, ’2017-06-29’, ...]
求s = [’2017-06-09’]與lst中哪個(gè)日期字符串最相近
思路1:將s和lst的值轉(zhuǎn)換為日期,遍歷比較相差的秒數(shù),最小的就是要找的日期字符串。
有沒(méi)有更好的實(shí)現(xiàn)方法??
問(wèn)題解答
回答1:我給個(gè)思路給你參考下lst.append(s)lst.sort()num=lst.index(s)然后比較lst[num-1]和lst[num+1]這兩個(gè)相差的秒數(shù),小的一個(gè)就是結(jié)果,這樣就不用遍歷算時(shí)間戳了。覺(jué)得不錯(cuò)就給贊加采納吧。
回答2:將日期通過(guò)去掉-轉(zhuǎn)換為整數(shù), 再分別與s中日期相減,得到絕對(duì)值最小的數(shù)為最相近的日期.
# Python codelst = [’2017-06-01’, ’2017-06-08’, ’2017-06-15’, ’2017-06-22’, ’2017-06-29’]s = [’2017-06-09’]date = [’’.join(x.split(’-’)) for x in lst]datetoint = [int(x) for x in date]gaps = [abs(x - int(’’.join(s[0].split(’-’)))) for x in datetoint]mostrecentdate = lst[gaps.index(min(gaps))]print(mostrecentdate)回答3:
感覺(jué)lz的意思是不要遍歷lst,不管是sort還是通減其實(shí)都發(fā)生了遍歷應(yīng)該用二分法吧,大概是這意思
i = 0j = len(list)while True: index = (i + j) / 2 if s > lst[index]:i = index else:j = index continue
就當(dāng)偽碼看了,反正是這意思,這樣遍歷次數(shù)最少。
相關(guān)文章:
1. python - 小白django提交數(shù)據(jù)后,沒(méi)有存儲(chǔ)到數(shù)據(jù)庫(kù)(查閱資料并沒(méi)有發(fā)現(xiàn)問(wèn)題)2. mysql - jdbc的問(wèn)題3. python - 編碼問(wèn)題求助4. Python如何播放還存在StringIO中的MP3?5. mysql - 分庫(kù)分表、分區(qū)、讀寫分離 這些都是用在什么場(chǎng)景下 ,會(huì)帶來(lái)哪些效率或者其他方面的好處6. 網(wǎng)頁(yè)爬蟲(chóng) - Python 爬蟲(chóng)中如何處理驗(yàn)證碼?7. 圖片鏈接的地址怎么獲得的8. python - 我在使用pip install -r requirements.txt下載時(shí),為什么部分能下載,部分不能下載9. Python爬蟲(chóng)如何爬取span和span中間的內(nèi)容并分別存入字典里?10. mysql - 如何減少使用或者不用LEFT JOIN查詢?
