Maison > Questions et réponses > le corps du texte
Il existe une liste de chaînes de date, comme suit :
lst = ['2017-06-01', '2017-06-08', '2017-06-15', '2017-06-22', '2017-06-29', ...]
Trouvez quelle chaîne de date dans s = ['2017-06-09']
与lst
est la plus similaire
Idée 1 : convertissez les valeursde s et lst en dates, parcourez et comparez la différence en secondes, et la plus petite est la chaîne de date que vous recherchez.
Existe-t-il une meilleure façon d’y parvenir ? ?
typecho2017-06-15 09:23:43
Je vais vous donner une idée pour votre référence
lst.append(s)
lst.sort()
num=lst.index(s)
Puis comparez lst[num-1] et lst[num+1] Le plus petit le nombre de secondes de différence est le résultat, il n'est donc pas nécessaire de parcourir et de calculer l'horodatage.
Si vous le trouvez bien, donnez-le à Zanga et adoptez-le.
漂亮男人2017-06-15 09:23:43
Soustrayez les dates en supprimant les dates entre -
转换为整数, 再分别与s
, et le nombre avec la plus petite valeur absolue est la date la plus proche.
# 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
Je pense que lz signifie ne pas parcourir lst. Qu'il s'agisse d'un tri ou d'une soustraction, le parcours se produit réellement
Je devrais utiliser la méthode de dichotomie. C'est probablement ce que cela signifie
i = 0
j = len(list)
while True:
index = (i + j) / 2
if s > lst[index]:
i = index
else:
j = index
continue
Il suffit de le lire sous forme de pseudo-code, c'est ce que cela signifie de toute façon, de cette façon, le nombre de traversées est le moins possible.