Уведомления

Группа в Telegram: @pythonsu

#1 Май 17, 2007 22:34:15

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка массива без if'ов и циклов - мой вариант =)

Не особо элегантно но тем не менее:

>>> ls
[1, 1, 1, 1, 3, 4, 5, 6, 12, 4, 5]
>>> b=[]
>>>
def prn(b,n,x):
b.append(x)
return (n>1) and prn(b,n-1,x)

>>> filter(lambda x: ((x in ls) and prn(b,ls.count(x),x)),range(max(ls)+2))
[]
>>> b
[1, 1, 1, 1, 3, 4, 4, 5, 5, 6, 12]
>>>
Хотелось бы конечно написать “однострочник” ну или на худой конец обойтись без def и использовать только lambda. Использование count тоже является мелким читерством - уж тогда и ls.sort можно было использовать =) Однако ls.cout можно реализовать внешним(по отношению к исходному выражению:
filter(lambda x: ((x in ls) and prn(b,ls.count(x),x)),range(max(ls)+2))
) следующим образом - идея вот:
>>> x=1
>>> len(filter(lambda y:y==x,ls))
p.s. Джентельмены поделитесь разными трюками которые вы знаете - мне очень интересно =)
p.p.s А как на питоне выглядит программа печатающая свой исходный код?



Отредактировано (Май 17, 2007 22:40:02)

Офлайн

#2 Май 17, 2007 23:34:19

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка массива без if'ов и циклов - мой вариант =)

$m1t то не сортування – список ls як був не відсортований так і залишився (((((



Офлайн

#3 Май 18, 2007 03:49:02

xonix
От:
Зарегистрирован: 2006-12-31
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка массива без if'ов и циклов - мой вариант =)

Ну вот, как вариант, быстрая сортировка, почти полная копия с хаскелла, и в одну строку)

sortIt = lambda lst: \
	len(lst) >1 and sortIt([x for x in lst[1:] if x<=lst[0]]) \
				+ [lst[0]] \
				+ sortIt([x for x in lst[1:] if x>lst[0]]) \
			or lst
print sortIt([1,3,2,4,5,1,8,0,7]) # => [0, 1, 1, 2, 3, 4, 5, 7, 8]



Офлайн

#4 Май 18, 2007 04:06:36

xonix
От:
Зарегистрирован: 2006-12-31
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка массива без if'ов и циклов - мой вариант =)

По самопечатающим программам (Квинам) сюда. Там и питон имеется )



Офлайн

#5 Май 18, 2007 10:38:14

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка массива без if'ов и циклов - мой вариант =)

>$m1t то не сортування – список ls як був не відсортований так і залишився (((((
просто у меня сортировка “не по месту” так, кажется, это называется.



Офлайн

#6 Май 20, 2007 23:49:15

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Сортировка массива без if'ов и циклов - мой вариант =)

ls.sort с указанием ключа или предиката уже не устраивает? В твоем случае даже это не нужно :)
Для более сложных примеров мне bisect обычно хватало



Офлайн

#7 Май 21, 2007 10:51:13

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка массива без if'ов и циклов - мой вариант =)

$m1t
p.p.s А как на питоне выглядит программа печатающая свой исходный код?
У будь-яку програму вставляєш цей рядок і вона автоматично перетворюється на квін :)
print open(__import__("sys").argv[0]).read()
:)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version