2017-09-20 5 views
0

J'ai tapoté un peu à ce sujet et je n'ai trouvé aucune question avec ce problème. On y va:Retour tuple de liste et entier en python

J'écris un code en python pour compter le nombre d'inversions dans une liste de nombres en utilisant le paradigme diviser pour régner.

def invertions(vec): 
    i = c = 0 
    j = int(len(vec)/2) 

    # base case 
    if (int(len(vec) == 1)): 
     return 0 

    v1 = vec[:int(len(vec)/2)] 
    v2 = vec[int(len(vec)/2):] 

    (v1, a) = invertions(v1) 
    (v2, b) = invertions(v2) 

    vec = v1 + v2 

    while(i < int(len(vec)/2) and j < len(vec)): 
     if(vec[i] > vec[j]): 
      c += (j-i + (j - int(len(vec)/2))) 
      j += 1 
     else: 
      i += 1 

    vec.sort() 

    return list(vec, a + b + c) 

Donc, à un certain point, je besoin de retourner la liste partielle triée et le nombre de invertions dans cette liste partielle. Mais pour une raison quelconque, la fonction ne retourne pas un type tuple, mais un int.

La question est: comment puis-je retourner un tuple ou liste de différents types (je ne sais pas si cela est ou non à l'origine du problème) dans une fonction en python?

Merci à l'avance

+0

Il est possible qu'une fonction retournerait différents types. En python, vous n'avez pas besoin de connaître le type avec lequel vous travaillez. – Idan

+1

Pouvez-vous fournir un exemple d'entrée/sortie et spécifier ce qui compte comme une inversion? 0/1, 1/0, les deux, 1/-1? – TemporalWolf

+5

Le cas de base a 'return 0' – wim

Répondre

0

Le tuple lui-même est pas un problème du tout! Le cas de base renvoie uniquement un entier. Modification de la ligne

return 0 

à

return (vec, 0) 

a résolu le problème