J'ai un fichier d'entrée qui ressemble à ce qui suit:
et il pourrait y avoir plus de lignes. Ce que je dois faire, c'est d'extraire la valeur qui est avant le signe maintenant si i aussi j'ai besoin de faire une itération afin que cela fonctionne pour toutes les lignes, mais je peut le faire plus tard. Je veux d'abord m'assurer que cela fonctionne pour la première ligne. P> Toute suggestion? p> p> 4 * 2 ^ 3 + 4 ^ 1
2 * 1 ^ 2 + 2 ^ 3 code> p>
* code>, donc pour la première ligne qui correspond au
4 code>. Alors j'ai besoin de faire un tuple
g = [(2,3), (4,1)] code>, de sorte que les tuples-paires sont séparées par le
+ code>, puis le paire elle-même par le
^ code>. p>
impression termes code> i get
['2 ^ 3', '4 ^ 1'] code>, et si i
imprimer x code> i get
4 code>, donc cela semble fonctionner. Mais maintenant, j'ai besoin d'obtenir ces valeurs dans le formulaire de tuple décrit. Si je me séparais sur
'^' code> Je ne reçois pas le résultat nécessaire, mais
["[" ["2", "3 '," 1' "," 1 '] "] code>, qui n'est pas fonctionnel. Je l'ai essayé avec
facteurs = str (termes.split ('^')) code>. P>
4 Réponses :
maintenant si i
impression termes code> i get
['2 ^ 3', '4 ^ 1'] code> p> p>
alors pour chaque valeur (chaîne) dans
termes code>, vous devez diviser sur '^', puis lancer chaque résultat sur INT et emballer en tuple: P>
g = [tuple(map(int, x.split('^'))) for x in terms]
Je collectionnerais d'abord tous les chiffres de la chaîne, attribuez-les à leurs tuples respectifs, puis attribuez-les à une liste.
[(2, 3), (4, 1)] Process finished with exit code 0
Voici une meilleure façon de le faire:
import re x = [] g = [] with open('input.txt') as infile: for line in infile: nums = re.split(r'[\*\^\+]', line) x.append(int(nums[0])) g.append((int(nums[1]), int(nums[2]))) print(x) # [4, 2] print(g) # [(2, 3), (1, 2)]
Nice, je ne savais jamais que vous pouviez scinder plusieurs personnages d'une ligne, très soigné :)
Si vous analysez les expressions générales, vous voudrez peut-être construire un arbre d'analyse à la place:
add mul number 4 exp number 2 number 3 exp number 4 number 1
Je n'étais pas familier avec ce type d'arbres d'analyse. Merci pour la perspicacité :)
Si je me sépare à nouveau sur '^' Je n'obtiens pas le résultat nécessaire code>. S'il vous plaît montrer votre code.
facteurs = str (termes.split ('^')) code>
Pourquoi utilisez-vous
str code> partout?