Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/11/2020, à 09:16

chris7522

Est il possible de faire plus propre ?(python)

Bonjour a toutes et a tous ,
   Tout est dans le titre .
   Merci de votre aide .

def ajout(a):
    temp = []
    temp2 = []
    for i in a:
        if i > 0:
            temp.append(i)
        else:
            temp2.append(i)
    return(temp,temp2)
    
liste = [22,-77,-2,44,56,35]
pos,neg = ajout(liste)
print(f"Les valeurs positives sont :\n {pos}\nIl y a {len(pos)} valeurs")
print(f"Les valeurs negatives sont :\n {neg}\nIl y a {len(neg)} valeurs"

Hors ligne

#2 Le 19/11/2020, à 11:05

pseudofab

Re : Est il possible de faire plus propre ?(python)

Bonjour,
Il est bien ton code . Il y a plusieurs façons de faire mais pas forcément mieux ... En fait, la notion de 'mieux' correspond au contexte du programme et à ce que l'on souhaite. On peut vouloir privilégier l'économie en ressource mémoire , ou, la rapidité de traitement, ou, la visibilité du code... 
Ceci dit, pour faire tourner ton moulin, je te montre un code avec filter()

def ajout(a):
    return list(filter(lambda i: i>0, a)), list(filter(lambda i: i<0, a)) 

liste = [22,-77,-2,44,56,35]
pos, neg = ajout(liste) 
print(f"Les valeurs positives sont :\n {pos}\nIl y a {len(pos)} valeurs")
print(f"Les valeurs negatives sont :\n {neg}\nIl y a {len(neg)} valeurs")

Avantage de ce code: ne crée pas de listes intermédiaires , écriture courte et compréhensible  ---> économie des ressources mémoire du pc
Inconvénient : parcours 2 fois la liste


# Là pour le plaisir de découvrir ...
# Envie d'apprendre Bash ou Python? Pensez aux MOOC ---> https://forum.ubuntu-fr.org/viewtopic.php?id=2030646

Hors ligne

#3 Le 19/11/2020, à 11:38

beuguissime

Re : Est il possible de faire plus propre ?(python)

Bonjour,

Très compacte ta solution pseudofab. Je crois que je n'aurais pas réussi à faire aussi court !

pseudofab a écrit :

Avantage de ce code: ne crée pas de listes intermédiaires , écriture courte et compréhensible  ---> économie des ressources mémoire du pc
Inconvénient : parcours 2 fois la liste

… et fait deux fois le test de positivité. Sur des petites listes, ce ne sont pas de gros inconvénients car le temps d'exécution devrait rester très court du point de vue d'un humain. Si ta liste a plusieurs centaines de milliers de valeurs, par contre, la différence de temps d'exécution pourrait se sentir.

Hors ligne

#4 Le 19/11/2020, à 17:33

pseudofab

Re : Est il possible de faire plus propre ?(python)

Entièrement d'accord.
Après, vu que les vitesses d'exécutions dépendent aussi de comment est implanté dans python les commandes exécutés, on pourrait utiliser le module timeit pour comparer plusieurs codes...


# Là pour le plaisir de découvrir ...
# Envie d'apprendre Bash ou Python? Pensez aux MOOC ---> https://forum.ubuntu-fr.org/viewtopic.php?id=2030646

Hors ligne

#5 Le 19/11/2020, à 18:57

chris7522

Re : Est il possible de faire plus propre ?(python)

Merci d'avoir pris le temps de me répondre smile
J'ai pas super bien compris le role de la fonction filter()
Bonne soirée , bon beaujolais .

Hors ligne

#6 Le 19/11/2020, à 22:25

toitoinebzh

Re : Est il possible de faire plus propre ?(python)

si ton objectif est de faire du calcul scientifique plus tard, tu peux t"intéresser à numpy

>>> import numpy
>>> liste = [22,-77,-2,44,56,35]
>>> liste = numpy.array(liste)
>>> liste[liste>0]
array([22, 44, 56, 35])
>>> liste[liste<0]
array([-77,  -2])
>>> 

Hors ligne

#7 Le 19/11/2020, à 22:34

beuguissime

Re : Est il possible de faire plus propre ?(python)

Ou plus simplement, si c'est possible de faire ainsi :

>>> liste = numpy.array([22,-77,-2,44,56,35])

Hors ligne

#8 Le 20/11/2020, à 09:25

pseudofab

Re : Est il possible de faire plus propre ?(python)

chris7522 a écrit :

J'ai pas super bien compris le role de la fonction filter()

>>> help(filter)
Help on class filter in module builtins:

class filter(object)
 |  filter(function or None, iterable) --> filter object
 |  
 |  Return an iterator yielding those items of iterable for which function(item)
 |  is true. If function is None, return the items that are true.
 |  
 |  Methods defined here:
 |  
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |  
 |  __iter__(self, /)
 |      Implement iter(self).
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.
 |  
 |  __next__(self, /)
 |      Implement next(self).
 |  
 |  __reduce__(...)
 |      Return state information for pickling.

Filter() retourne un itérateur donnant les éléments d'itérable pour lesquels la fonction est vraie.
exemple:

>>> f = filter(lambda data: type(data)==str,  [1, 4, 'yop', 18, 'truc'])
>>> for string in f:
	print(string)

	
yop
truc
>>> 

Ici la fonction est : lambda data: type(data)==str
et l'itérable est : la liste [1, 4, 'yop', 18, 'truc']


# Là pour le plaisir de découvrir ...
# Envie d'apprendre Bash ou Python? Pensez aux MOOC ---> https://forum.ubuntu-fr.org/viewtopic.php?id=2030646

Hors ligne

#9 Le 21/11/2020, à 07:24

chris7522

Re : Est il possible de faire plus propre ?(python)

Ok parfaitement compris .
Merci a tous smile

Hors ligne

#10 Le 21/11/2020, à 07:58

chris7522

Re : Est il possible de faire plus propre ?(python)

toitoinebzh a écrit :

si ton objectif est de faire du calcul scientifique plus tard, tu peux t"intéresser à numpy

Merci de ton aide .
Comment installer numpy ?

Hors ligne

#11 Le 21/11/2020, à 08:25

pseudofab

Re : Est il possible de faire plus propre ?(python)

chris7522 a écrit :
toitoinebzh a écrit :

si ton objectif est de faire du calcul scientifique plus tard, tu peux t"intéresser à numpy

Merci de ton aide .
Comment installer numpy ?

sudo apt-get install python3-numpy python3-matplotlib python3-pandas

Avec cette commande tu installes  numpy, matplolib, pandas (ces librairies forment un ecosystème data science de python, leurs usages sont liés)


# Là pour le plaisir de découvrir ...
# Envie d'apprendre Bash ou Python? Pensez aux MOOC ---> https://forum.ubuntu-fr.org/viewtopic.php?id=2030646

Hors ligne

#12 Le 21/11/2020, à 15:09

chris7522

Re : Est il possible de faire plus propre ?(python)

OK merci .
Une dernière chose , existe t il une possibilité de faire un "clear" dans l'interpréteur python ?

Hors ligne

#13 Le 21/11/2020, à 18:27

pseudofab

Re : Est il possible de faire plus propre ?(python)

Tu peux faire un ctrl+l .


# Là pour le plaisir de découvrir ...
# Envie d'apprendre Bash ou Python? Pensez aux MOOC ---> https://forum.ubuntu-fr.org/viewtopic.php?id=2030646

Hors ligne

#14 Le 22/11/2020, à 16:39

beuguissime

Re : Est il possible de faire plus propre ?(python)

Et si ça n'est pas déjà le cas, je te conseille d'utiliser ipython3 comme console python3.

Hors ligne

#15 Le 25/11/2020, à 08:51

chris7522

Re : Est il possible de faire plus propre ?(python)

beuguissime a écrit :

Et si ça n'est pas déjà le cas, je te conseille d'utiliser ipython3 comme console python3.

Je te remercie . Pour quelles  raisons  me le conseilles tu ?

Hors ligne

#16 Le 25/11/2020, à 08:52

chris7522

Re : Est il possible de faire plus propre ?(python)

pseudofab a écrit :

Tu peux faire un ctrl+l .

Je te remercie.  Effectivement,  c’est très pratique !

Hors ligne

#17 Le 25/11/2020, à 09:23

beuguissime

Re : Est il possible de faire plus propre ?(python)

chris7522 a écrit :
beuguissime a écrit :

Et si ça n'est pas déjà le cas, je te conseille d'utiliser ipython3 comme console python3.

Je te remercie . Pour quelles  raisons  me le conseilles tu ?

Le plus simple est de l'essayer. En quelques mots : coloration syntaxique, complètement, fonctions magiques.

Hors ligne