2017-08-17 1 views
0

Je souhaite créer une boucle qui crée un objet si une certaine condition est remplie, puis l'ajoute à une liste. Cependant, je ne sais pas comment nommer ces objets de manière unique afin qu'ils puissent être utilisés/référencés plus tard. Par exemple quelque chose comme ceci:Attribution d'un nom aux objets créés dans une boucle

favNumbers = [] 

numbers = [6, 21, 5, 22] 

class favNumber(object): 
    def __init__(self, value): 
     self.value = value 

for i in numbers: 
    if i % 2 == 0: 
     unique_name_for_object = favNumber(i) 
     favNumbers.append(unique_name_for_object) 

Comment aurais-je donné le favNumber des objets un nom unique? Je pensais les nommer en quelque sorte numéro1, numéro2, numéro3 ... mais je pense que les nommer dynamiquement serait une mauvaise idée.

Y a-t-il un moyen de le faire sans les nommer dynamiquement? Il semble que ce serait impossible mais je ne sais pas comment je pourrais l'accomplir autrement.

+2

C'est un _set_ pas un _list_. Grande différence entre les deux. –

+1

Index dans une liste identifie un objet de façon unique, pourquoi auriez-vous besoin d'un nom unique aussi? –

+2

https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem Pourquoi n'essayez-vous pas de préciser ce que vous voulez accomplir et peut-être que nous trouverons une meilleure approche? –

Répondre

1

Il n'est pas nécessaire de nommer les instances. Juste essayer celui-ci maintenant

favNumbers = [] 
numbers = [6, 21, 5, 22] 


class favNumber(object): 
    def __init__(self, value): 
     self.value = value 


for i in numbers: 
    if i % 2 == 0: 
     favNumbers.append(favNumber(i)) 

, favNumbers est une liste de toutes les instances créées. Si vous voulez obtenir le value ot l'chaque instance, il suffit de taper

for fn in favNumbers: 
    print(fn.value) 
+0

Pourrait aussi bien utiliser une liste comp. – SwiftsNamesake

+1

@SwiftsNamesake Yup: 'favNumbers = [i pour i dans les nombres si i% 2 == 0]'. –

+1

@SwiftsNamesake vous pourriez. Ou tu ne pourrais pas. N'importe quel. –

0

Si vous souhaitez simplement générer une liste, vous pouvez utiliser un list comprehension:

favNumbers = [favNumber(i) for i in numbers if n % 2 == 0] 

La dernière expression (if n % n == 0) agit comme un filtre. Pour accéder aux valeurs, utilisez un index (par exemple, favNumbers[0] pour le premier élément) ou faites une boucle dans la liste comme vous l'avez fait avec numbers.


Comme quelqu'un a fait remarquer dans les commentaires, {} est un dict et ne peut pas être annexé. Vous pouvez cependant insérer des éléments donnés une clé (qui pourrait aussi bien être l'entier i, bien qu'il soit généralement plus logique d'utiliser des listes lorsque les clés sont des entiers non négatifs consécutifs).

for i in numbers: 
    if n % 2 == 0: 
    favNumbers[i] = favNumber(i) 

Il peut également être fait avec une compréhension dictionnaire:

favNumbers = { i : favNumber(i) for i in numbers if n % n == 0 } 

Je mettrai à jour la réponse si vous fournissez un contexte supplémentaire.