Rumah > Soal Jawab > teks badan
Terdapat senarai rentetan tarikh, seperti berikut:
lst = ['2017-06-01', '2017-06-08', '2017-06-15', '2017-06-22', '2017-06-29', ...]
Cari rentetan tarikh dalam s = ['2017-06-09']
与lst
yang paling serupa
IDEA 1: Tukar nilai S dan LST ke dalam tarikh, melintasi dan membandingkan perbezaan dalam beberapa saat, dan yang terkecil adalah rentetan tarikh yang anda cari.
Adakah cara yang lebih baik untuk mencapai matlamat ini? ?
typecho2017-06-15 09:23:43
Saya akan memberi anda idea untuk rujukan anda
lst.append(s)
lst.sort()
num=lst.index(s)
Kemudian bandingkan lst[num-1] dan lst[num+1] Semakin kecil perbezaan bilangan saat adalah hasilnya, jadi tidak perlu merentasi dan mengira cap waktu.
Jika anda rasa ia bagus, sila berikan kepada Zanga dan pakai.
漂亮男人2017-06-15 09:23:43
Tolak tarikh dengan mengalih keluar tarikh dalam -
转换为整数, 再分别与s
, dan nombor dengan nilai mutlak terkecil ialah tarikh terdekat.
# Python code
lst = ['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)
伊谢尔伦2017-06-15 09:23:43
Saya merasakan bahawa lz bermaksud untuk tidak melintasi lst Sama ada ia adalah isihan atau penolakan, traversal sebenarnya berlaku
Saya harus menggunakan kaedah dikotomi ini mungkin maksudnya
i = 0
j = len(list)
while True:
index = (i + j) / 2
if s > lst[index]:
i = index
else:
j = index
continue
Baca sahaja sebagai kod pseudo, itulah maksudnya, dengan cara ini bilangan traversal adalah paling sedikit.