3 votes

imprimer toutes les variables de la liste des classes sans utiliser l'instruction for en python

J'ai mis quelques classes( wow ) dans la liste a . Et je veux imprimer la variable num de tous les éléments de a sans utiliser l'instruction for. Que dois-je faire ?

Je veux (exemple) :

[1,5,3,4,0] # Expected output

Ce que j'ai essayé :

import random as r

class wow():
    def __init__(self):
        self.num=r.randint(0,10)
a=[]
for x in range(5):
    a.append(wow())

print((lambda x: x)(a).num)

3voto

Artyom Vancyan Points 781
print(list(map(lambda x: x.num, a)))

3voto

mehrdad-pedramfar Points 4667

Vous pouvez ajouter __str__() à votre classe :

class wow(): 
    def __init__(self): 
        self.num=r.randint(0,10) 

    def __str__(self): 
        return str(self.num) 

puis en imprimant simplement :

print(*a)

vous obtiendrez :

3 9 4 9 3

en outre, en lisant ceci [Lien](https://www.journaldev.com/22460/python-str-repr-functions#:~:text=Python%20__str__(),is%20invoked%20on%20an%20object.&text=If%20we%20don't%20implement,calls%20__repr__()%20function.) pourrait être bon pour un meilleur indice :

1voto

James Points 12337

Je ne recommande pas cela, mais vous pouvez utiliser map avec une fonction lambda.

import random as r

class wow():
    def __init__(self):
        self.num=r.randint(0,10)
a=[]
for x in range(5):
    a.append(wow())

_ = list(map(lambda x: print(x.num, end=' '), a))
# prints:
2 8 0 6 5

Vous pouvez également utiliser une boucle while et attraper les StopIteration .

g = iter(a)
while True:
    try:
        print(next(g).num, end=' ')
    except StopIteration:
        break

1voto

Daweo Points 10024

Vous pourriez exploiter operator.attribgetter pour cette tâche en suivant le chemin :

import operator
import random
class wow:
    def __init__(self):
        self.num=random.randint(0,10)
a=[]
for x in range(5):
    a.append(wow())
print(*map(operator.attrgetter('num'),a))

Output:

4 3 9 8 8

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X