Not sure if this is worth it, but because numpy is teh awesome:

```python
atgc = tile(array(['A', 'T', 'G', 'C']), 16)
codons = [''.join(r) for r in vstack([atgc, roll(atgc, 1), roll(atgc, 2)]).T]
```