Подборка самых эффектных и элегантных примеров на Python, умещающихся в одну строчку. Прекрасное развлечение и зарядка для ума.
print «hello world»
Лямбда функции:
max_xy=lambda x,y: x if x > y else y
Map функции:
n=[1,2,3,4]
print((map(lambda x:x**2 + 2, n)))
Reduce функции:
n=[1,2,3,4]
print(reduce (lambda x,y: x*y, n))
Filter функции:
n=[1,2,3,4]
print (list(filter(lambda x: x > 2, n)))
Быстрая сортировка:
qsort=lambda l : l if len(l)<=1 else qsort([x for x in l[1:] if x < l[0]]) + [l[0]] + qsort([x for x in l[1:] if x >=l[0]])
Расстояние между двумя точками:
dist=lambda w,v : (sum((wi — vi)**2 for wi,vi in zip(w,v)))**.5
Значение числа Пи:
4*sum((-1.0)**(n%2) / (2*n + 1) for n in range(2010))
Генерация непрерывного массива чисел:
print map(lambda x:x+1,range(0,20))
Простые числа от 0 до 1000:
print filter(None,map(lambda y:y*reduce(lambda x,y:x*y!=0, map(lambda x,y=y:y%x,range(2,int(pow(y,0.5)+1))),1),range(2,1000)))
Первые 20 чисел Фибоначчи:
print map(lambda x,f=lambda x,f:(x<=1) or (f(x-1,f)+f(x-2,f)): f(x,f), range(20))
Все возможные сочетания:
cross_product=[(a, b) for a in [‘a’, ‘b’, ‘c’] for b in [1, 2, 3]]
Отрезать конец одной строки и добавить его к другой:
def foo(string, numbers): return ‘, ‘.join(map(lambda s,n:s+str(n), [string for i in numbers], numbers))
Умножение вектора на число:
def scale(A, x): return [ai*x for ai in A]
scale([3,4,5], 2)
Сложение векторов:
A=[1, 2, 3]
B=[5, 8, 10]
def add(A, B): return [ai+bi for (ai, bi) in zip(A, B)]
add(A,B)
Транспонирование матрицы:
a=[[1,2,3],[4,5,6],[7,8,9]]
inverted_a=[list(i) for i in zip(*a)]