J'ai des chaînes comme ceci:
>>> course.parseString("CS 2110") ([(['CS', 2110], {})], {}) >>> course_data.parseString("CS 2110, 4301, 2123, 1110") before: [['CS', 2110], 4301, 2123, 1110] after: [['CS', 2110], ('CS', 4301), ('CS', 2123), ('CS', 1110)] ([(['CS', 2110], {}), ('CS', 4301), ('CS', 2123), ('CS', 1110)], {})
4 Réponses :
Est-ce la bonne façon de le faire, ou je suis Je désactive totalement? P>
C'est une façon de le faire, bien que, bien sûr, il existe d'autres (par exemple, utilisez-le comme des actions d'analyse à deux méthodes liées - donc l'instance que la méthode appartient à peut conserver l'état - un pour le code du département et un autre pour le numéro de cours ). P>
La valeur de retour du
Parsestring code> L'appel est plus difficile à plier à votre volonté (bien que je sache suffisamment la magie sombre le fera et j'attends avec impatience Paul McGuire expliquant Comment ;-), alors pourquoi ne pas aller la voie à la méthode liée comme dans ...: p>
xxx pré> Ceci émet: p>
before: [['CS', '2110'], '4301', '2123', '1110'] after: [('CS', '2110'), ('CS', '4301'), ('CS', '2123'), ('CS', '1110')] [('CS', '2110'), ('CS', '4301'), ('CS', '2123'), ('CS', '1110')]
Cette solution mémorise le département lorsqu'il est analysé et émet un tuple (dept, coursenum) lorsqu'un numéro est trouvé.
[('MSE', 2110), ('MSE', 3030), ('MSE', 4102), ('CSE', 1000), ('CSE', 2000), ('CSE', 3000)]
Bien sûr, tout le monde aime pymparsing code>. Pour des choses faciles comme cette division, c'est tellement plus facile à faciliter la grok:
data = '''\ MSE 2110, 3030, 4102 CSE 1000, 2000, 3000''' def get_courses(data): for row in data.splitlines(): department, *numbers = row.replace(",", "").split() for number in numbers: yield department, number This would give a generator for the course codes. A list can be made with list() if need be, or you can iterate over it directly.
Vous devriez accepter une réponse, je pense.