Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Impossible d'utiliser une liste depuis une liste de liste avec son index ?

+3 votes

EDIT: je suis en Python 2.7 j'aurais dû le dire peut-être.

Pourquoi j'arrive pas à utiliser ma première liste de listoflist avec listoflist[0] ?

# -*- coding: utf-8 -*-

from __future__ import unicode_literals


def median(listoflist):

    # sort 1ere list dans listoflist
    print listoflist[0].sort()  # imprime None et je vois pas pourquoi :(

    median_students = len(listoflist[0]) / 2
    median_tuition = len(listoflist[1]) / 2

    print "Median students: ", listoflist[0][median_students],\
          "devrait être 10566"
    print "Median tuition: ", listoflist[1][median_tuition],\
          "devrait être 39849"


median([
    [2175, 19627, 10566, 7802, 5879, 19535, 11701],
    [37704, 39849, 40732, 37000, 35551, 40569, 40500]
    ])

PS : l'idée finale de tout ceci est de pouvoir obtenir l'élément médian de chacune des deux listes, c'est un exercice, je suis débutant.

demandé 12-Fev-2015 par Hoglob (258 points)
edité 12-Fev-2015 par Hoglob

C'est très laid d' aller chercher des résultats d'exos sur le net sans se creuser un minimum ;)

la charte est "pas de bonjour pas de merci pas d'au revoir :P"

Ma foi je n'ai pas envie qu'on me donne la solution, juste qu'on m'explique pourquoi mon raisonnement semble ne pas être bon.

EDIT: je voulais répondre au commentaire qui a été fait sur ma question, pas créer une réponse. Je ne vois pas comment faire ceci...

2 Réponses

+7 votes
 
Meilleure réponse
   listoflist[0].sort()

renvoie None car c'est sa valeur de retour par défaut, cette fonction agit directement sur ton tableau listoflist[0] sans avoir besoin de renvoyer quoique ce soit, en effet les tableaux sont modifiables en python.
Tu n'a qu'a afficher ton tableau pour remarquer qu'il est bel est bien trié.

De plus len(t) ne te renvoie que la longueur du tableau (ou si tu veux le nombre de cases -1) , or si ton tableau fait 7 cases comme dans ton exemple, len(t)/2 te renverra 3.5, il serait peut-être plus judicieux d'effectuer une division entière lent(t)//2 pour ne pas te retrouver dans le probleme du nombre de cases impaires du tableau.

Ps : Quand tu files un code, file le code d'erreur ça peut servir
Pss : Quand ton code ne te renvoit pas ce que tu attends, fais plusieurs print histoire de savoir exactement qu'est-ce qui ne fonctionne pas comme prévu.

répondu 12-Fev-2015 par boblinux (3,092 points)
edité 13-Fev-2015 par boblinux

Tu n'a qu'a afficher ton tableau pour remarquer qu'il est bel est bien trié.

Oui, j'utilise des print à tout bout de champ pour essayer de piger mais justement c'est là que je pige pas.
Pourquoi est-ce que tout mon tableau est trié et non pas seulement l'élément que j'ai indiqué via [0] ?

Je n'ai pas de code d'erreur à présenter, mon problème semble être d'ordre logique, mais je m'en souviendrais pour les prochaines fois, merci !

Pourquoi est-ce que tout mon tableau est trié et non pas seulement
l'élément que j'ai indiqué via [0] ?

Euh...chez moi ça marche... (python3)

>>> x=[
...     [2175, 19627, 10566, 7802, 5879, 19535, 11701],
...     [37704, 39849, 40732, 37000, 35551, 40569, 40500]
...     ]
>>> x[0]
[2175, 19627, 10566, 7802, 5879, 19535, 11701]
>>> x[0].sort()
>>> x
[[2175, 5879, 7802, 10566, 11701, 19535, 19627], [37704, 39849, 40732, 37000, 35551, 40569, 40500]]
>>> x[0]
[2175, 5879, 7802, 10566, 11701, 19535, 19627]
>>> x[1]
[37704, 39849, 40732, 37000, 35551, 40569, 40500]

On voit bien que x[0] est trié, alors que x[1] n'est pas trié.

Si t'as du mal n'hésite pas :D

'listoflist[0].sort()'
renvoie None car c'est sa valeur de retour par défaut, cette fonction agit directement sur ton tableau listoflist[0] sans avoir besoin de renvoyer quoique ce soit, en effet les tableaux sont modifiables en python.

Ok il y a un élément du puzzle qui me manque je pense.
Pourquoi None est la valeur par défaut d'un sort de liste ?

Pourquoi None est la valeur par défaut d'un sort de liste ?

Non, en fait None est la valeur par défaut de toute fonction python qui ne renvoi rien explicitement(c'est à dire qui ne contient pas de return quelque chose, on apelle ça une procédure dans certains langages comme le C ), donc ne ce n'est pas spécifique à .sort().
exemple1:

>>> def mafonction():
...      print ("Fonction sans retour de valeur !")
>>> print(mafonction())
Fonction sans retour de valeur !
None

exemple2:

>>> l=[1,2]
>>> print(l.append(4))
None

En gros, ça veut dire que tout s'est bien passé !

Ok j'ai pigé ! ("pas-merci" puisque c'est interdit ! ^^)

Cool t'as pigé la logique : "Allez droit au but" :D
Mais ce n'est pas con cette idée quand on y réfléchit, car comme ça on gagne du temps, et on peut consacrer ses neurones exclusivement à la résolution du problème et pas perdre de temps sur des subtilités éphémères. Par contre ce truc ne marche pas IRL(dans la vie réelle) ce qui est bien dommage ':(

+2 votes

si tu veux voir ta listoflist organisée (et pas forcément pouvoir bosser dessus!) c'est plutôt

print(sorted(listoflist[0]))

qu'il te faut.

répondu 12-Fev-2015 par furankun (1,434 points)
...