A while back I wrote about sonnet primes, primes of the form *ababcdcdefefgg* where the letters a through g represent digits and *a* is not zero. The name comes from the rhyme scheme of an English (Shakespearean) sonnet.

In the original post I gave Mathematica code to find all sonnet primes. This post shows how to do it in Python.

from sympy.ntheory import isprime from itertools import permutations def number(t): # turn a tuple into a number return 10100000000000*t[0] + 1010000000000*t[1] + 1010000000*t[2] + 101000000*t[3] + 101000*t[4] + 10100*t[5] + 11*t[6] sonnet_numbers = (number(t) for t in permutations(range(10), 7) if t[0] != 0) sonnet_primes = filter(isprime, sonnet_numbers)

Rather than filter, I would have used

sonnet_primes = (number for number in sonnet_numbers if isprime(number))

It is a bit more verbose, but it looks more obvious to me, especially in the context of mathematics

Love the alignment of your code! Makes everything look beautiful, even poetic.