Buonasera in questo codice
lista = [ ['ciao','pippo','pluto'] , ['topolino','paperino','zio'] ]
for row in range(len(lista))
for col in range(len(lista[col][row])
l'errore è situato nella terza riga, ovvero
for col in range(len(lista[col][row])
per il semplice motivo che alla variabile "col" non hai ancora assegnato un valore, e perciò è impossibile andare a prendere l'elemento all'indice row (None non è un indice valido)
Per quanto riguarda il ragionamento sembra che tu non abbia ben compreso il funzionamento delle liste multidimenzionali. Una lista multidimenzionale non è altro che una lista che contiene altre liste. E ogni lista va trattata nella stessa maniera.
Prendiamo il tuo esempio:
lista = [ ['ciao','pippo','pluto'] , ['topolino','paperino','zio'] ]
Andando a fare len(lista) si otterrà 2, in quanto contiene ['ciao','pippo','pluto'] e ['topolino','paperino','zio'].
Andando a fare lista[0] si otterrà ['ciao','pippo','pluto'], con lista [1] si otterrà ['topolino','paperino','zio'].
Ora queste sono delle altre semplicissime liste, e quindi validi parametri per la funzione len().
Quindi, se volessi andare a prendere la lunghezza della lista ['ciao','pippo','pluto'] mi basterebbe fare len(lista[0]). Infatti:
len(lista[0])
len( ['ciao','pippo','pluto'])
3
Spero di essere stato abbastanza chiaro, per ogni dubbio non esitare a chiedere :)
EDIT:
Rileggendo bene mi sono scordato di spiegare il perchè del fuori range!
Prendiamo il tuo caso:
lista = [ ['ciao','pippo','pluto'] , ['topolino','paperino','zio'] ]
for row in range(len(lista))
for col in range(len(lista[col][row])
cosa fa la terza riga in particolare? Andiamolo ad esaminare:
col=0 #prendo questi valori come esempio
row=0
len(lista[col][row])
len(lista[0][0])
len("ciao") #ciao è una stringa, e in quanto tale è una lista di caratteri
4
len("ciao")>len(lista[0])
Ecco spiegato l'errore!