Generating Permutations in Python
Python has so many neat stuff to help you with this one, I feel alot can be rewritten:


  I did a lot of C++ and miss std::swap(..)


Luckily you can swap really easy in python

For instance the swap method, can be rewritten like 

def swap(a, i, j):
    a[i], a[j] = a[j], a[i]



  Is there a simpler way to trigger the unfolding of the iterator into a list?


Yes there is list slicing. 

Just with list slicing only the reversed could be a[k + 1::-1]
Where the last -1 is the step, and -1 means we step over it in reverse
This returns a list and not a generator, thus your reverse could be
return a[:k + 1] + a[k + 1::-1]

@user2357112, I feel like a rookie now.

I made a mistake, intuitively while fast typing I thought list reversing would be like this list[start:end:step] but instead it works differently, with exclusion.

[first i to include:first i to exclude:step], and becomes:

return a[:k + 1] + a[:k:-1]