import itertools
import functools
xs = [3, 1, 4, 1, 5]
rev_xs = list(reversed(xs))
print('rev_xs = {}'.format(rev_xs))
acc = list(itertools.accumulate(xs))
print('acc = {}'.format(acc))
ys = [2, 7, 1, 8, 2]
xys = list(zip(xs, ys))
print('xys = {}'.format(xys))
sqs = list(map(lambda x: x**2, xs))
print('sqs = {}'.format(sqs))
odds = list(filter(lambda x: x % 2 == 1, xs))
print('odds = {}'.format(odds))
fib5, _ = functools.reduce(
    lambda p, _: (p[0] + p[1], p[0]),
    range(4),
    (1, 0)
)
print('fib5 = {}'.format(fib5))
x_max = max(xs)
print('x_max = {}'.format(x_max))
zs = []
z_min = min(zs, default=0)
print('z_min = {}'.format(z_min))
x_argmin = min(xs, key=lambda x: x % 2)
print('x_argmin={}'.format(x_argmin))
s = sum(xs)
print('s = {}'.format(s))
is_all_odd = all(x % 2 == 1 for x in xs)
print('is_all_odd = {}'.format(is_all_odd))
does_exist_even = any(x % 2 == 0 for x in xs)
print('does_exits_even = {}'.format(does_exist_even))
indexed_xs = [(i, x) for i, x in enumerate(xs)]
print('indexed_xs = {}'.format(indexed_xs))
sorted_xs = sorted(xs)
print('sorted_xs = {}'.format(sorted_xs))
ps = list(range(10))
print('ps = {}'.format(ps))
qs = list(range(1, 10))
print('qs = {}'.format(qs))
heads = xs[:3]
print('heads = {}'.format(heads))
tails = xs[3:]
print('tails = {}'.format(tails))
