Profissionalmente eu uso C++. Mas para desafios de programação como o Project Euler e Advent of Code, eu costumo usar Python. O problema é mudar de contexto e lembrar como fazer as coisas em python. Por isso eu fiz essa pequena cola de Python para uso pessoal. Espero que isso possa ajudar alguém também.

Com o tempo eu vou editar e adicionar mais coisas a essa lista.

Estrututras de dados

O Defaultdict é um dicionário que não lança uma exceção quando não acha alguma chave, ele retorna um valor padrão:

from collections import defaultdict

dd = defaultdict(int)

Flat de uma matriz (um nível):

list(itertools.chain.from_iterable([[1,2], [3]])) # [1,2,3]

Rotacionar uma matrix:

def rotate(m): return list(map(list, zip(*list(m)[::-1])))

rotate([[1,2],[3,4]]) # [[3, 1], [4, 2]]

Tamanho de únicos em uma lista:

len(set([1,2,2])) == 2

Contar elementos:

[1,2,2].count(2) == 2

Percorrer lista com índices:

for i, value in enumerate([1,2]): print(i, value)

Percorrer dicionário:

for key, value in d.items(): print(key, value)

Pegar o máximo de uma lista de acordo com uma função:

max(arr, key=f)

Strings

','.join([1,2,3]) == '1,2,3'

Detectando se uma string é um inteiro

# não detecta números negativos
"12".isdigit()
# pode ser substituído por float
try:
    return int(y)
except ValueError:
    # faz outra coisa

Lendo a entrada

import sys
sys.stdin.readlines()
input() # read string
eval(input()) #parse next argument
# lê entrada pa/53
p = re.search(r'p([a-p])/(\d+)', move)
a, b = p.group(1), p.group(2)

Funcional

from functools import reduce

reduce(lambda s, x: s + x], [1,2,3], 0) == 6

itertools

O módulo itertools é muito útil. Aqui algumas funções úteis:

import itertools

list(itertools.combinations([1,2,3], 2)) # [(1, 2), (1, 3), (2, 3)]
list(itertools.permutations([1,2,3], 2)) # [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]