Найти - Пользователи
Полная версия: Сортировка массива без if'ов и циклов - мой вариант =)
Начало » Python для экспертов » Сортировка массива без if'ов и циклов - мой вариант =)
1
$m1t
Не особо элегантно но тем не менее:
>>> 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 А как на питоне выглядит программа печатающая свой исходный код?
tabajara
$m1t то не сортування – список ls як був не відсортований так і залишився (((((
xonix
Ну вот, как вариант, быстрая сортировка, почти полная копия с хаскелла, и в одну строку)

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]
xonix
По самопечатающим программам (Квинам) сюда. Там и питон имеется )
$m1t
>$m1t то не сортування – список ls як був не відсортований так і залишився (((((
просто у меня сортировка “не по месту” так, кажется, это называется.
Андрей Светлов
ls.sort с указанием ключа или предиката уже не устраивает? В твоем случае даже это не нужно :)
Для более сложных примеров мне bisect обычно хватало
tabajara
$m1t
p.p.s А как на питоне выглядит программа печатающая свой исходный код?
У будь-яку програму вставляєш цей рядок і вона автоматично перетворюється на квін :)
print open(__import__("sys").argv[0]).read()
:)
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