Форум сайта python.su
43
да входная строка скорей всего, не думаю что это у нее получается в результате вычислений
Офлайн
0
“WTS1234, ACDW485, WTS72, SHR728, ACDW14, SHR16, WTS16“ - исходная строка
”WTS16, WTS72, WTS1234, ACDW14, ACDW485, SHR16, SHR728" - то, что должно получиться в результате
Офлайн
43
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'
Отредактировано sergeek (Янв. 9, 2013 07:00:32)
Офлайн
С телефона пишу, так что питон старый
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 >>>
Офлайн
43
в третьем оказывается убрали аргумент с функцией на сравнение в сортировке, а я то помню что было что-то подобное. Интересно зачем. Для того чтобы перегрузкой методов на сравнение вместо этого пользовались, может быть. Форсят питонистов ооп использовать вместо фп(если можно это так назвать) 
Офлайн
0
sergeek
в буквах не видно закономерности
Офлайн
0
спасибо большое)
Офлайн
857
#!/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]$
Офлайн
43
py.user.nextно ведь не гоже благородному дону выполнять работу машины. Вдруг там таких хренек очень много?
prefs = ('WTS', ‘ACDW’, ‘SHR’)
Офлайн