Soustraire 2 éléments d'une même liste?

nathaniel -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Voici ce que je veux faire.

n = int(input())
p = 10000000
c = n
list = []
for i in range(n):    
    list.append(i)
list.sort(reverse=True)
while c > 1:
    for i in range(n):
        l = list[0] - list[1]#je ne peux soustraire ces éléments et je ne trouve pas la syntaxe approprié
        if l < p:
            p = list[0] - list[1]  # pareil
            del list[1]   #il fonctionne là
        else:
            del list[1]   #,mais il fonctionne pas là(le delete)
    list.remove(max(list))
    c = c-1
print(l)


... pour trouver les deux entiers les plus proches.

2 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, si tu veux comprendre ce que fait ton programme, ajoute
    print(liste)
    juste avant la ligne qui te donne une erreur.
    0
    1. Nathaniel
       
      Sa imprime
      [9,8,5]
      [9,5]
      []
      donc, il faut juste que je réinitialise la liste pour que sa donne sa
      [9,8,5]
      [9,5]
      [8,5]

      ça la l'air de marcher ,mais maintenant je veux écrire
      del list[0] * g
      ou g augmente à chaque fois
      0
  2. trifou
     
    Bonsoir,

    > pour trouver les 2 entiers les plus proche

    Les entiers les plus proches de quoi ?
    Pourquoi faire des suppressions pour trouver des valeurs d'une liste plus proches de telle valeur ?
    0
    1. Nathaniel
       
      ses un défi et je dois trouver les deux entiers les plus proches données. alors je les insère dans la liste pour que se soit plus facile les supression ses pour changer les deux éléments cote à cote et les esseyer pour trouver les plus petits
      0
    2. trifou > Nathaniel
       
      Bonjour,

      Si tu dois toujours avoir 2 valeurs proches, alors autant initialiser une liste à 2 éléments, et changer ces valeurs si une autre est plus proche.

      import random
      
      nombres = random.sample(range(1, 501), 20)
      n = 200
      proches = [1000] * 2
      
      for nombre in nombres:
          dif = abs(n - nombre)
          proches_dif = [abs(p - n) for p in proches]
          maxi = max(proches_dif)
          if dif < maxi:
              proches[proches_dif.index(maxi)] = nombre
      
      print(nombres)
      print(proches)


      Il y aura une optimisation à faire afin de ne pas recalculer proches_dif à chaque tour.
      Un autre problème se pose.
      Si on a
      n = 200
      et
      proches = [210, 190] 
      on souhaite insérer une valeur plus proche de n par exemple 205, quelle valeur supprimer ? Vu que toutes deux sont à une différence de 10.
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > trifou
       
      moi je ferais ainsi:
      import random
      quantite=40
      minimum,maximum=-50,50
      nombres = random.sample(range(minimum, maximum), quantite)
      delta = abs(maximum-minimum)
      for n1 in range(quantite):
          for n2 in range(n1+1,quantite):
              dif = abs(nombres[n1]-nombres[n2])
              if delta > dif:
                  delta=dif
                  positions=(n1,n2)
                  proches=(nombres[n1],nombres[n2])
      print(nombres)
      print(delta,positions,proches)
      0
    4. trifou > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonsoir,

      Oui, ça fonctionne, mais je n'ai pas compris pourquoi tu es parti en prenant les valeurs les plus proches de la 1ère valeur de la liste et non une valeur arbitraire.
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > trifou
       
      mon intention était de chercher, dans la liste, les deux valeurs les plus proches (l'une de l'autre).
      sinon, il se serait agit de "la valeur la plus proche" (d'une valeur donnée)
      hors, j'ai lu "les 2 entiers les plus proche", et j'ai supposé que je pouvais ajouter un s à proche.
      0