17 лучших однострочников на Python
Подборка самых эффектных и элегантных примеров на 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)]
Другое
Случайный элемент:
import random; random.choice(['alpha', 'beta', 'gamma', 'delta'])
Задание списка или множества операций:
M = ['a', 'b', 'c', 'c', '1', '100', 'a10']
M.append('Beta')