Вы делаете вещи довольно сложными для себя.Вместо того, чтобы преобразовывать массив головоломок во всех направлениях, просто посещайте каждую букву по очереди и ищите слова в каждом из восьми направлений, начиная с этой буквы.
Поскольку это, кажется, своего рода домашнее задание, я будуоставьте вас, чтобы заполнить детали, но основная схема вашего кода должна выглядеть примерно так:
puzzle = [list(row) for row in 'OTNEGRASAE', 'RNNCORALLO', 'OAIBLUEEVG',
'UTORENTIIA', 'VIOLETTOOR', 'OCRARIAELO', 'DABIMALVAP', 'IPCIELOGLR',
'CORPOSOUAO', 'APIENOMILP']
word_list = ['ACIDO', 'ARGENTO', 'BLU', 'CIELO', 'CORALLO', 'CORPOSO', 'ELETTRICO',
'LATTE', 'LIMONE', 'MALVA', 'NERO', 'OCRA', 'OPACITA', 'ORO', 'PAGLIERINO',
'PIENO', 'PORPORA', 'PRIMITIVO', 'VIOLA', 'VIOLETTO']
for {each word in word_list}:
for {each cell in puzzle}:
if {cell.upper() == first character of word}:
for direction in [(1,0),(1,1),(0,1),(-1,1),(-1,0),(-1,-1),(0,-1),(1,-1)]:
(dx, dy) = direction
{Does the puzzle contain all the other characters of word in this direction?}
{If so change these cells to lower case, and skip to next word}
{extract all the remaining upper case letters from the puzzle}