[Python] Questo, da Python, non me lo sarei mai aspettato

Daniele Zambelli daniele.zambelli a gmail.com
Dom 11 Feb 2024 16:32:40 CET


Stavo studiando degli algoritmi per produrre la lista delle
permutazioni di una sequenza, ho modificato una funzione che ho
trovato su stackoverflow e mi sono imbattuto in un comportamento molto
strano (per me).
Lo script è questo:

def permutazioni1(head, tail='', result=[]):
    if len(head) == 0:
        result.append(tail)
    else:
        for i in range(len(head)):
            permutazioni1(head[:i] + head[i+1:], tail + head[i])
        else:
          return(result)

print(permutazioni1("abc"))

print('---------------------')

print(permutazioni1("def"))

Io mi aspettavo che il parametro "result" fosse locale alla funzione
"permutazioni1" e che non mantenesse il suo contenuto tra una chiamata
e l'altra della funzione il risultato dello script è:

['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
---------------------
['abc', 'acb', 'bac', 'bca', 'cab', 'cba', 'def', 'dfe', 'edf', 'efd',
'fde', 'fed']

Probabilmente non è il modo corretto per ottenere la lista delle
permutazioni, ma qualcuno sa spiegarmi perché si comporta così e come
eventualmente correggerlo?

 Grazie, da una domenica uggiosa.

-- 

Daniele

www.matematicadolce.eu

Perché la scuola,
invece di essere un luogo dove ci si allena a imparare,
è un luogo dove si fa finta di sapere?


Maggiori informazioni sulla lista Python