Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème classique le milieu d'une liste

Sujet résolu
23 juin 2014 à 0:49:54

Bonjour,

Voici mon problème.

J'ai une liste L avec des chiffre à l'intérieur. L = [5, 6, 8, 7, 10]

La taille de la liste est impaire. Ici 5.

Je voudrais définir une fonction milieu(L) qui permettrait de 

résoudre pour tout L, son milieu ainsi que sa valeur.

Dans ce cas, ça donnerait milieu(L) donnerait 8.

Est ce que vous aurez des autres manières de le faire que celle-ci? SVP

L=[0, 8, 100, 4, 3]

def milieu(L):

    return L[(len(L)-1)/2]

print(milieu(L))

  • Partager sur Facebook
  • Partager sur Twitter
23 juin 2014 à 0:54:15

Par définition, le type len(L) est un nombre entier.

Il m'indique cette erreur : TypeError: list indices must be integers, not float

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
23 juin 2014 à 1:41:50

Salut,
Ce que tu veux faire, c'est trouver la médiane de ta série L. En math, la médiane d'une série S composée de N valeurs est la donnée centrale de celle-ci si N est impair ou la moyenne des deux données les plus proches de N/2 si N est pair. Tu aura donc le code suivant:
def milieu(L):
    if len(L) % 2 == 0: 
        return (L[len(L)//2] + L[len(L)//2+1])/2
    else:
        return L[len(L)//2+1]

-
Edité par Anonyme 23 juin 2014 à 12:11:51

  • Partager sur Facebook
  • Partager sur Twitter
23 juin 2014 à 2:36:02

Je comprend pas pourquoi tu utilises le conditionnel if ... else.
  • Partager sur Facebook
  • Partager sur Twitter
23 juin 2014 à 9:20:15

AlphaZeta a écrit:


if len(L) % 2 == 0: 
    return (L[len(L)//2] + L[len(L)//2+1])/2
else:
    return L[len(L)//2+1]

a,b = divmod(len(L)-1,2)
return (L[a]+L[a+b])/2


-
Edité par josmiley 23 juin 2014 à 9:42:58

  • Partager sur Facebook
  • Partager sur Twitter

Python c'est bon, mangez-en. 

23 juin 2014 à 9:26:17

@AlphaZeta : il me semble qu'il veut la valeur située au milieu de la liste, pas la valeur médiane ?

Bon mais dans ce cas il faut bien que le nb des éléments de la liste soit impair

def milieu(liste):
	if len(liste) % 2 != 0:
		return liste[len(liste) // 2]
	else:
		print("la liste a un nb d'elements pair")

-
Edité par noobien 23 juin 2014 à 9:27:44

  • Partager sur Facebook
  • Partager sur Twitter
23 juin 2014 à 9:51:53

@noobien: tu confond médiane et moyenne. La médiane c'est bien la valeur du milieu de la liste rangé dans l'ordre croissant, ou la moyenne des deux valeurs du milieu dans le cas d'un nombre pair d'éléments:

[0, 2, 4, 5, 7, 8, 9] : médiane:5

[0, 2, 4, 5, 6, 7, 8, 9] : médiane:5, 5 ((5+6)/2)

EDIT: Gloups, erreur de compréhesionsmiley

-
Edité par pythan 23 juin 2014 à 10:05:38

  • Partager sur Facebook
  • Partager sur Twitter
Bevet Breizh! Breizh dizalc'h! Betek an trec'h! Ha mallozh ruz d'ar c'hallaoued! Trouvez votre voie
23 juin 2014 à 9:53:19

Merci tout le monde, noobien ta solution me convient. 

  • Partager sur Facebook
  • Partager sur Twitter
23 juin 2014 à 9:57:28

Pardon mais je ne fais que répondre à la question de sebibops telle qu'il l'a formulée :

Dans son exemple avec une liste L = [5, 6, 8, 7, 10], il veut une fonction qui lui retourne 8 ; or si la liste était triée ce serait 7.

Donc j'en déduis qu'il veut bien une fonction retournant la valeur située au milieu de la liste ; qui renverrait 'c' pour l = ['a', 'b', 'c', 'd', 'e']

EDIT : @pythan : pas de souci  ;)

@sebibops : passe le sujet en résolu

A+

-
Edité par noobien 23 juin 2014 à 10:16:45

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
23 juin 2014 à 12:13:59

Je pensais que la fonction milieu devait dans tout les cas (y compris si len(L) est pair) retourner une valeur.
  • Partager sur Facebook
  • Partager sur Twitter
7 mars 2024 à 9:22:48

merci pour toutes les aides uwu ;)
  • Partager sur Facebook
  • Partager sur Twitter
7 mars 2024 à 11:08:54

@XavierRodriguez9 Bonjour, pour dire merci pas la peine de déterrer un sujet, vous avez la possibilité de cliquer sur les pouces levés des messages qui vous ont aidés.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Liens conseillés

Je ferme ici.

  • Partager sur Facebook
  • Partager sur Twitter