Как я могу упорядочивать в Пайтоне из-за версий?

У меня есть список цепей, которые содержат числа глав серий. У меня есть список в этом формате:

Serie2- (1)
Serie2- (4)
Serie2- (10)
Serie2- (3)

Реализовав lista.sort() они остались бы такими:

Serie2- (1)
Serie2- (10)
Serie2- (3)
Serie2- (4)

Существует способ способствовать тому, чтобы они были рукоположены из-за версий?

Serie2- (1)
Serie2- (3)
Serie2- (4)
Serie2- (10)

Или я буду должен менять имена один на один и добавлять 0 к числам единственного числа?

2
задан 23.12.2019, 16:24
3 ответа

Ты можешь использовать LooseVersion, которые позволяют упорядочивать "из-за версий" вместо numГ©ricamente:

from distutils.version import LooseVersion

versiones = ["Serie2- (1)", "Serie2- (4)", "Serie2- (10)", "Serie2- (3)"]
lv = [LooseVersion(ver) for ver in versiones]
lv.sort()

Сейчас порядок - красивый, на основании версий:

>>> lv
[LooseVersion ('Serie2- (1)'),
 LooseVersion ('Serie2- (3)'),
 LooseVersion ('Serie2- (4)'),
 LooseVersion ('Serie2- (10)')]
2
ответ дан 23.12.2019, 22:06
  • 1
    привет @ferdoqui, вместо v, irí в versiones правда? – Lucas Damian 23.12.2019, 19:15
  • 2
    Абсолютно, Лукас. Спасибо за indicá rmelo, уже corregí. Он перемещает меня многий, который я тестирую в помещении с короткими именами, и потом мне забывает сделать имя красивым – fedorqui 23.12.2019, 19:20

Хороший для твоего случая ты мог бы использовать метод sort, но приводя в соответствие это, в которое ты нуждаешься, я даю тебе пример:

Сначала оставил тебе ссылку в ней documentaciГіn sort Упорядочивать КАК ее pГЎgina python.org , так как allГ - encontrarГЎs примеры сложных распоряжений .

Сейчас объяснил немного, как ты мог бы решать это:

re.findall(r'\d+', cad.split("-")[1])[0]

то, что он делает cГіdigo предыдущий, состоит в том, чтобы возвращать их мне nГєmeros цепи в этом случае " (1)", " (4)", и т.д., так как я делаю split , чтобы это делить из-за "-", он возвратит мне 1, 4, 'и т.д.'.

ты Можешь находить mГЎs informaciГіn на re в Г©ste ссылку

Сейчас мы используем метод sort, чтобы упорядочивать используя lambda (В первой ссылке ты находил informaciГіn на Г©sto) :

series.sort(key=lambda cad: (int)(re.findall(r'\d+', cad.split("-")[1])[0]))

то, что делается с cГіdigo предыдущий, состоит в том, чтобы упорядочивать твой список из-за них nГєmeros, что находятся после guiГіn каждой цепи.

Сейчас пример с данными, которых ты поместил: Вышедшие

import re
series = ["Serie2- (1)", "Serie2- (4)", "Serie2- (10)", "Serie2- (3)"]
series.sort(key=lambda cad: (int)(re.findall(r'\d+', cad.split("-")[1])[0]))
print (series)

:

['Serie2 - (1)', 'Serie2 - (3)', 'Serie2 - (4)', 'Serie2 - (10)'] Надеялся

подайте тебя. Привет ;)

1
ответ дан 23.12.2019, 22:06

Одна aproximaciГіn простая serГ, - чтобы "захватывать" их nГєmeros versiГіn и упорядочивать numГ©ricamente из-за тех же самых. Мы можем использовать регулярные выражения, чтобы извлекать любой nГєmero между скобками

import re

regex = r"\((\d+)\)"

versiones_ordenadas = sorted(versiones, key=lambda x: int(re.search(regex, x).group(1)))
print(versiones_ordenadas)

['Serie2- (1)', 'Serie2- (3)', 'Serie2- (4)', 'Serie2- (10)']

С key=lambda x: int(re.search(regex, x).group(1)), устанавливаем одну funciГіn anГіnima, чтобы возвращать стоимость, из-за которой мы будем упорядочивать, в этом случае это стоимость numГ©rico ее expresiГіn захваченная.

1
ответ дан 23.12.2019, 22:06