Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Test

3 réponses
Avatar
pierre
Bonjour,

Je suis en train d'écrire un petit programme en python, rien de bien
contraignant : j'ai un fichier texte de plusieurs milliers de nombres
entiers séparés par des virgules que je voudrais segmenter en paragraphe
pour le mettre en page via LaTeX. Donc, je veux le découper en
paragraphe de 1000 nombres. Je cherche donc les occurrences de "," dans
le fichier et tous les 1000 j'ajoute '/n/n' pour créer un saut de
paragraphe.
La fin du fichier est atteinte lorsque la commande
"chaine.find(',',debut) renvoie -1.
La question est de savoir ce qui est le plus "économique" : tester une
égalité du type 'index == -1' ou une inégalité 'index < 0' : j'ai le
sentiment que la deuxième solution est plus économique (juste un bit à
tester si mes souvenirs sur le codage des entiers est exact).

Merci de vos réponses.

Cordialement
Pierre

3 réponses

Avatar
Nicolas
Bonjour,
Le 17/02/2016 10:01, pierre a écrit :
Bonjour,

Je suis en train d'écrire un petit programme en python, rien de bien
contraignant : j'ai un fichier texte de plusieurs milliers de nombres
entiers séparés par des virgules que je voudrais segmenter en paragraphe
pour le mettre en page via LaTeX. Donc, je veux le découper en
paragraphe de 1000 nombres. Je cherche donc les occurrences de "," dans
le fichier et tous les 1000 j'ajoute '/n/n' pour créer un saut de
paragraphe.
La fin du fichier est atteinte lorsque la commande
"chaine.find(',',debut) renvoie -1.
La question est de savoir ce qui est le plus "économique" : tester une
égalité du type 'index == -1' ou une inégalité 'index < 0' : j'ai le
sentiment que la deuxième solution est plus économique (juste un bit à
tester si mes souvenirs sur le codage des entiers est exact).


Python n'est pas du C. L'implémentation est différente suivant
l'interpréteur (C Pyhton, J Python, IronPython, PyPy...).
Je doute que l'on puisse trouver une différence de timing entre ces deux
opérateurs. Peut-être qu'un spécialiste Python pourrait donner une réponse.

Par contre, gagner en vitesse peut se faire en "pensant" Python.
Par exemple, si la taille du fichier n'est pas trop grosse :

# Lecture de tout le fichier
f = open("nom du fichier d'entree", "r")
data = f.read()
f.close()

# Transformation en liste
numbers = [n.strip() for n in data.split(",")]

# Liste de liste
block_size = 1000
data_b = [numbers[i:i+block_size] for i in range(0, len(numbers),
block_size)]

# Ecriture du fichier de sortie
f = open("nom du fichier de sortie", "w")
f.write(",n".join([", ".join(d) for d in data_b]))
f.close()

Nicolas


Merci de vos réponses.

Cordialement
Pierre
Avatar
Benoit Izac
Bonjour,

Le 17/02/2016 à 11:19, Nicolas a écrit dans le message
<56c4492a$0$665$ :

Je suis en train d'écrire un petit programme en python, rien de bien
contraignant : j'ai un fichier texte de plusieurs milliers de nombres
entiers séparés par des virgules que je voudrais segmenter en paragraphe
pour le mettre en page via LaTeX. Donc, je veux le découper en
paragraphe de 1000 nombres. Je cherche donc les occurrences de "," dans
le fichier et tous les 1000 j'ajoute '/n/n' pour créer un saut de
paragraphe.
La fin du fichier est atteinte lorsque la commande
"chaine.find(',',debut) renvoie -1.
La question est de savoir ce qui est le plus "économique" : tester une
égalité du type 'index == -1' ou une inégalité 'index < 0' : j'ai le
sentiment que la deuxième solution est plus économique (juste un bit à
tester si mes souvenirs sur le codage des entiers est exact).



Python n'est pas du C. L'implémentation est différente suivant
l'interpréteur (C Pyhton, J Python, IronPython, PyPy...).



Même en C, on ne se pose pas ce genre de question. Si la documentation
de la fonction indique qu'elle renvoie « -1 » alors on teste si elle
vaut « -1 », tout simplement.

[bons conseils]
f.write(",n".join([", ".join(d) for d in data_b]))


^^^^^
",nn"

Par curiosité, quel est l'intérêt de mettre en pages des milliers de
nombres entiers ?

--
Benoit Izac
Avatar
pierre
Le 17/02/2016 17:09, Benoit Izac a écrit :
Bonjour,

Le 17/02/2016 à 11:19, Nicolas a écrit dans le message
<56c4492a$0$665$ :

Je suis en train d'écrire un petit programme en python, rien de bien
contraignant : j'ai un fichier texte de plusieurs milliers de nombres
entiers séparés par des virgules que je voudrais segmenter en paragraphe
pour le mettre en page via LaTeX. Donc, je veux le découper en
paragraphe de 1000 nombres. Je cherche donc les occurrences de "," dans
le fichier et tous les 1000 j'ajoute '/n/n' pour créer un saut de
paragraphe.
La fin du fichier est atteinte lorsque la commande
"chaine.find(',',debut) renvoie -1.
La question est de savoir ce qui est le plus "économique" : tester une
égalité du type 'index == -1' ou une inégalité 'index < 0' : j'ai le
sentiment que la deuxième solution est plus économique (juste un bit à
tester si mes souvenirs sur le codage des entiers est exact).



Python n'est pas du C. L'implémentation est différente suivant
l'interpréteur (C Pyhton, J Python, IronPython, PyPy...).



Même en C, on ne se pose pas ce genre de question. Si la documentation
de la fonction indique qu'elle renvoie « -1 » alors on teste si elle
vaut « -1 », tout simplement.

[bons conseils]
f.write(",n".join([", ".join(d) for d in data_b]))


^^^^^
",nn"

Par curiosité, quel est l'intérêt de mettre en pages des milliers de
nombres entiers ?



Aucun si ce n'est l'aspect didactique. Il faut bien se poser des
questions à la portée de mes connaissances qui ne sont pas très
étendues. Donc, je m'amuse sur des pb simples mais sans beaucoup
d'intérêt autre que d'apprendre...

En l’occurrence, il s'agit de la période du développement en fraction
continue de sqrt(410286423278424) que l'on peut utiliser pour résoudre
l'équation x^2 - 410286423278424 y^2 = 1 (dans Z^2), elle même étant
issue du problème "Les bœufs d'Hélios" du à Archimède.

https://fr.wikipedia.org/wiki/Probl%C3%A8me_des_b%C5%93ufs_d'H%C3%A9lios
https://fr.wikipedia.org/wiki/%C3%89quation_de_Pell-Fermat

Cordialement,

Pierre