Найти - Пользователи
Полная версия: Помогите отсортировать
Начало » Python для новичков » Помогите отсортировать
1 2 3 4
dimy44
Эх, сомневаюсь, что ТС этого хотел…
sergeek
да входная строка скорей всего, не думаю что это у нее получается в результате вычислений
Eva_777
“WTS1234, ACDW485, WTS72, SHR728, ACDW14, SHR16, WTS16“ - исходная строка

”WTS16, WTS72, WTS1234, ACDW14, ACDW485, SHR16, SHR728" - то, что должно получиться в результате
sergeek
import re
from itertools import  groupby
name_key = lambda e: re.match('(\D+)',e).group(1)
num_key = lambda e: int(re.match('.*?(\d+)',e).group(1))
stroka = "WTS1234, ACDW485, WTS72, SHR728, ACDW14, SHR16, WTS16"
v_rezultate = ', '.join([', '.join(sorted(g,key=num_key)) for k,g in groupby(sorted(stroka.split(', '),key=name_key),key=name_key)])
v_rezultate
Out[7]: 'ACDW14, ACDW485, SHR16, SHR728, WTS16, WTS72, WTS1234'
в буквах не видно закономерности
dimy44
С телефона пишу, так что питон старый
import re
start = 'WB35, WB5, ME522, GA666, GA616, ME52'
start = re.split(r', *', start)
s = lambda i: re.search(r'[A-Za-z]+', i).group()
d = lambda i: int(re.search(r'[0-9]+', i).group())
def _cmp(a, b):
    if s(a) == s(b):
        return cmp(d(a), d(b))
    return 0
start.sort(_cmp) 
print ', '.join(start)
>>>
WB5, WB35, ME52, ME522, GA616, GA666
>>>
как-то так)
sergeek
в третьем оказывается убрали аргумент с функцией на сравнение в сортировке, а я то помню что было что-то подобное. Интересно зачем. Для того чтобы перегрузкой методов на сравнение вместо этого пользовались, может быть. Форсят питонистов ооп использовать вместо фп(если можно это так назвать)
Eva_777
sergeek
в буквах не видно закономерности

ее там и нет, это как шаблон, по которому нужно отсортировать строку)
Eva_777
спасибо большое)
py.user.next
#!/usr/bin/env python3
 
# "WTS1234, ACDW485, WTS72, SHR728, ACDW14, SHR16, WTS16" - исходная строка
# "WTS16, WTS72, WTS1234, ACDW14, ACDW485, SHR16, SHR728" - отсортированная строка
 
import re
 
s = 'WTS1234, ACDW485, WTS72, SHR728, ACDW14, SHR16, WTS16'
 
prefs = ('WTS', 'ACDW', 'SHR')
 
out = []
for pref in prefs:
    lst = re.findall(pref + r'\d+', s)
    lst.sort(key=lambda i: int(re.search(r'\d+', i).group()))
    out.extend(lst)
sout = ', '.join(out) 
 
print(s)
print(sout)

[guest@localhost wnsort]$ ./t.py 
WTS1234, ACDW485, WTS72, SHR728, ACDW14, SHR16, WTS16
WTS16, WTS72, WTS1234, ACDW14, ACDW485, SHR16, SHR728
[guest@localhost wnsort]$
sergeek
py.user.next
prefs = ('WTS', ‘ACDW’, ‘SHR’)
но ведь не гоже благородному дону выполнять работу машины. Вдруг там таких хренек очень много?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB