Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 8, 2013 20:34:39

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Помогите отсортировать

Эх, сомневаюсь, что ТС этого хотел…

Офлайн

#2 Янв. 8, 2013 20:39:22

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Помогите отсортировать

да входная строка скорей всего, не думаю что это у нее получается в результате вычислений

Офлайн

#3 Янв. 8, 2013 20:50:19

Eva_777
Зарегистрирован: 2013-01-08
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите отсортировать

“WTS1234, ACDW485, WTS72, SHR728, ACDW14, SHR16, WTS16“ - исходная строка

”WTS16, WTS72, WTS1234, ACDW14, ACDW485, SHR16, SHR728" - то, что должно получиться в результате

Офлайн

#4 Янв. 8, 2013 21:31:40

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Помогите отсортировать

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)

Офлайн

#5 Янв. 8, 2013 21:48:00

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Помогите отсортировать

С телефона пишу, так что питон старый

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
>>>
как-то так)

Офлайн

#6 Янв. 8, 2013 22:04:59

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Помогите отсортировать

в третьем оказывается убрали аргумент с функцией на сравнение в сортировке, а я то помню что было что-то подобное. Интересно зачем. Для того чтобы перегрузкой методов на сравнение вместо этого пользовались, может быть. Форсят питонистов ооп использовать вместо фп(если можно это так назвать)

Офлайн

#7 Янв. 9, 2013 00:19:36

Eva_777
Зарегистрирован: 2013-01-08
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите отсортировать

sergeek
в буквах не видно закономерности

ее там и нет, это как шаблон, по которому нужно отсортировать строку)

Офлайн

#8 Янв. 9, 2013 00:20:22

Eva_777
Зарегистрирован: 2013-01-08
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите отсортировать

спасибо большое)

Офлайн

#9 Янв. 9, 2013 04:12:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10019
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите отсортировать

#!/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]$



Офлайн

#10 Янв. 9, 2013 07:19:01

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Помогите отсортировать

py.user.next
prefs = ('WTS', ‘ACDW’, ‘SHR’)
но ведь не гоже благородному дону выполнять работу машины. Вдруг там таких хренек очень много?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version