recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - petit algorithme python

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 valeurs​​de 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 ? ?

曾经蜡笔没有小新曾经蜡笔没有小新2751 Il y a quelques jours1170

répondre à tous(3)je répondrai

  • typecho

    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.

    répondre
    0
  • 漂亮男人

    漂亮男人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)

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦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.

    répondre
    0
  • Annulerrépondre