Soustraire 2 éléments d'une même liste?
nathaniel
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Voici ce que je veux faire.
... pour trouver les deux entiers les plus proches.
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
-
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, ajouteprint(liste)
juste avant la ligne qui te donne une erreur. -
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 ?-
-
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 an = 200
etproches = [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. -
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) -
-
-