2011-05-09 2 views
0

En Python, je travaille actuellement sur un projet. Je stocke les lignes d'un fichier sous forme de liste. Dans ces lignes, je veux délimiter les chaînes par des espaces et stocker les mots individuels de la ligne dans un objet.Comment accéder à une liste dans une liste en temps linéaire et créer des nombres indéterminés d'objets

Chaque ligne contient trois "mots" espacés. Je veux stocker chaque mot en tant qu'élément dans un objet de classe. Puisque je ne sais pas combien de lignes l'utilisateur peut avoir dans le fichier d'entrée, ces objets seront créés dans une quantité indéterminée.

Lorsque je parcours la liste des lignes et que je les "divise", j'obtiens une liste dans une liste. Je ne sais pas quoi faire avec les données sous cette forme (sans utiliser une boucle for-for-boucle), je suis coincé ici.

J'ai déjà créé la classe d'objet avec trois champs et méthodes pour accéder à ces champs. Cependant, je ne sais pas comment accéder à la "liste dans une liste" (en temps linéaire) et délimiter les mots et créer facilement et rapidement un nouvel objet avec les mots comme paramètres.

Si quelqu'un pouvait me donner des conseils sur les endroits où aller, je l'apprécierais. Je vous remercie.

Répondre

1
class MyClass(object): 
    def __init__(self, word1, word2, word3): 
     # your initialisation code here 

for line in list_of_lines: 
    words = line.split() 
    assert len(words) == 3 
    an_object = MyClass(*words) 
    do_something_with(an_object) 

Mise à jour en réponse à un commentaire:

Pour obtenir une liste d'objets MaClasse, un pour chaque ligne de votre fichier d'entrée:

with open("my_input_file.txt") as f: 
    the_list = [MyClass(*line.split()) for line in f] 
+0

Merci pour la suggestion. J'ai une sortie bizarre quand des suggestions? http://imageshack.us/photo/my-images/845/pythonhelp.png/ – LearningPython

+0

@LearningPython: Votre "ouptut bizarre" (instance __main __. Edge à some_hex_address') résulte de votre code faisant 'print an_object'. Votre classe 'Edge' n'a pas défini de méthode' __str__' ou '__repr__', donc vous obtenez le résultat par défaut - il vous indique que' an_object' fait référence à une instance de votre classe 'Edge' qui se trouve en mémoire à la adresse donnée. Si vous voulez savoir comment obtenir un résultat non "par défaut" non-par défaut de "print an_object", posez une question distincte; vous devrez montrer le code de votre classe 'Edge'. –

+0

Bon, j'ai compris comment résoudre le problème/j'ai ajouté une méthode de chaîne. Comment ajouter une quantité indéfinie d'objets? Est-ce même possible puisque les noms doivent être codés en dur? – LearningPython

0

Pourquoi les séparer avant de l'utiliser? Pourquoi ne pas diviser la ligne quand vous en avez besoin?

Certains pseudo codeish

for each line in list 
    items = line split 
    object(items) 
+0

Comment créez-vous plusieurs objets plutôt qu'un seul objet codé en dur? Je m'excuse si c'est une question de départ, bien que je sois nouveau à la conception orientée objet. – LearningPython

+0

@LearningPython: @ La réponse d'Orjanp est pseudocode - ne la prenez pas comme code exécutable littéral-immédiat. En tout cas: je ne vois nulle part «un objet codé en dur». L'idée générale du pseudo-code de @ Orjanp (et le mien) est que vous créez une instance Edge à partir de chaque ligne. Chaque instance est distincte de toutes les autres, même si les 3 "mots" utilisés pour les créer sont identiques. C'est à vous de faire quelque chose d'utile avec chaque instance, comme (par exemple) l'ajouter à une liste ... –

Questions connexes