Manipulation des listes

Résolu/Fermé
drpoison22 - Modifié le 7 juin 2023 à 12:54
yg_be Messages postés 22909 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 juin 2024 - 4 juin 2023 à 13:49

Bonjour à tous

J'ai un devoir en sismique dans lequel je dois écrire un programme en python qui calcule certains paramètres de sismique pour N couches dans le sol. En gros, je veux écrire un programme qui parcourt une liste et qui retourne une liste qui ne contenant que les valeurs dont la différence est trop grande.

Voici mon code :

drt = [0]
c = 0
v = [
  299.40119760479047,
  301.2048192771085,
  314.4654088050313,
  1515.1515151515162,
  1470.5882352941182,
  1515.1515151515134,
  1515.1515151515162
] # voici le tableau que je veux trier

for i in range (len(v)):
    if i + 1 > len(v):
        break 
    if abs(v[i + 1] - v[i] > 1) <= 10 :
        drt[c] = v[i]
    else:
        drt.append(v[i + 1])
        c += 1
    i += 1

Je voudrais à la fin avoir par exemple une liste comme celle ci :

[299.40119760479047, 1515.1515151515162,]

Merci d'avance pour votre aide.

A voir également:

4 réponses

yg_be Messages postés 22909 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 juin 2024 1 480
Modifié le 7 juin 2023 à 12:55

ceci te donnera le résultat attendu:

v = [
  299.40119760479047,
  301.2048192771085,
  314.4654088050313,
  1515.1515151515162,
  1470.5882352941182,
  1515.1515151515134,
  1515.1515151515163
] # voici le tableau que je veux trier
drt = [v[0]]
for i in range(len(v) - 1):
    if abs(v[i + 1] - v[i]) > abs(v[i]) / 10 :
        drt.append(v[i + 1])
print(drt)
1
PierrotLeFou
4 juin 2023 à 06:57

> liste qui ne va contenir que les valeurs dont la difference est trop grande.
C'est quoi trop grande?
> voici le tableau que je veux trier.
Ton énoncé n'est pas clair et ton code plus qu'étrange ...
Peux-tu être plus précis?
À première vue, je ferais un tri avec la méthode .sort()
et j'afficherais la valeur liste[0] et liste[-1]

0

Dans la pratique en géophysique, le tableau en entré sont des vitesses qui traverse les couchent. quand on fait une interprétation, la variation de vitesse entre 314 et 1515 montre qu'on est passé d'une couche à une autre. 

j'ai deja ecrit le programme pour calculer les vitesses dans le sol, maintenant dans la suite il faut detecter ce genre de variation. dans le cas du tableau suivant 

[299.40119760479047,
 301.2048192771085,
 314.4654088050313,
 1515.1515151515162,
 1470.5882352941182,
 1515.1515151515134,
 1515.1515151515162] 

je veux que mon programme sache que quand il passe de 299 à 314 il se situe dans la meme couche donc dans le tableau creer il ne met qu'un seul element parmi les trois. lorsqu'il passe de 314 à 1515 c'est un changement de couche donc il enregistre la vitesse de la nouvelle couche.

en gros je voudrais avoir un tableau à la fin qui ne garde que une vitesse par couche. je ne sais pas si j'ai ete clair

0

ce que j'ai fais cest une soustraction, je me dis que si je varie avec un intervalle de de + OU - 10 je suis dans une meme couche. et si je suis au dela je suis dans une autre couche differente de la premiere alors je dois ajouter (append) la valeur qui correspond à la vitesse du nouveau milieu au tableau drt=[0] crée au debut. la valeur qu'on a append vient retrouver la valeur de la vitesse dans la couche precedente

0
yg_be Messages postés 22909 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 juin 2024 1 480
4 juin 2023 à 10:14

bonjour,

Quel est le résultat obtenu par ton code?

0
yg_be Messages postés 22909 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 juin 2024 1 480
4 juin 2023 à 10:21

qu'essaies-tu d'obtenir en écrivant

abs(v[i+1]-v[i]>1)
0