Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Opérations Efficaces sur les Chaînes de Caractères | Amélioration des Performances avec les Outils Intégrés
Techniques d’Optimisation en Python

bookOpérations Efficaces sur les Chaînes de Caractères

Concaténation efficace de chaînes de caractères

Lors de la manipulation de nombreuses chaînes, il est essentiel d'utiliser la méthode la plus efficace pour la concaténation. L'utilisation répétée de l'opérateur + (+=) est inefficace pour les grands ensembles de données, car elle crée une nouvelle chaîne à chaque fois. À la place, l'utilisation de str.join() est beaucoup plus rapide et consomme moins de mémoire.

Comparaison des performances de deux approches pour concaténer des chaînes avec des caractères de nouvelle ligne dans une seule chaîne. La première utilise une boucle for avec l'opérateur +=, tandis que la seconde exploite la méthode plus efficace str.join().

1234567891011121314151617181920212223
import os decorators = os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Simulated lines of a report lines = [f"Line {i}" for i in range(1, 1000001)] # Inefficient concatenation @timeit_decorator(number=50) def concat_with_plus(): result = "" for line in lines: result += line + "\n" return result # Efficient concatenation @timeit_decorator(number=50) def concat_with_join(): return "\n".join(lines) + "\n" # Add final newline for consistency result_plus = concat_with_plus() result_join = concat_with_join() print(result_plus == result_join)
copy

Précompilation des expressions régulières

Lors de l'utilisation d'expressions régulières, les performances peuvent devenir un enjeu, en particulier lors du traitement de grands ensembles de données ou de correspondances de motifs répétitives. Dans ces cas, précompiler le motif constitue une technique d'optimisation utile.

La précompilation garantit que le moteur d'expressions régulières ne recompile pas le motif à chaque utilisation, ce qui peut améliorer considérablement les performances lorsque le même motif est appliqué plusieurs fois sur un ensemble de données. Cette méthode est particulièrement avantageuse dans des situations telles que le filtrage, la validation ou la recherche dans de grands fichiers texte.

Comparons les performances de deux méthodes pour valider des noms d'utilisateur à l'aide d'expressions régulières. La première méthode utilise la fonction re.match avec le motif défini en ligne à chaque appel. La seconde, plus efficace, précompile le motif regex à l'aide de re.compile et le réutilise pour toutes les validations.

1234567891011121314151617181920212223
import os import re decorators = os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Simulated usernames usernames = ["user123", "admin!@#", "test_user", "invalid!"] * 100000 # Naive approach @timeit_decorator(number=10) def validate_with_re(): pattern = r"^\w+$" return [bool(re.match(pattern, username)) for username in usernames] # Optimized approach @timeit_decorator(number=10) def validate_with_compiled_re(): compiled_pattern = re.compile(r"^\w+$") return [bool(compiled_pattern.match(username)) for username in usernames] result_without_precompiling = validate_with_re() result_with_precompiling = validate_with_compiled_re() print(result_without_precompiling == result_with_precompiling)
copy

1. Vous générez un rapport de 10000 lignes, où chaque ligne représente un résumé de transaction. Quelle méthode est la plus efficace pour combiner ces lignes en une seule chaîne avec ; comme séparateur ?

2. Pourquoi la précompilation d'une expression régulière avec re.compile() est-elle souvent plus rapide que l'utilisation de re.match() avec un motif en ligne ?

question mark

Vous générez un rapport de 10000 lignes, où chaque ligne représente un résumé de transaction. Quelle méthode est la plus efficace pour combiner ces lignes en une seule chaîne avec ; comme séparateur ?

Select the correct answer

question mark

Pourquoi la précompilation d'une expression régulière avec re.compile() est-elle souvent plus rapide que l'utilisation de re.match() avec un motif en ligne ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 4

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 7.69

bookOpérations Efficaces sur les Chaînes de Caractères

Glissez pour afficher le menu

Concaténation efficace de chaînes de caractères

Lors de la manipulation de nombreuses chaînes, il est essentiel d'utiliser la méthode la plus efficace pour la concaténation. L'utilisation répétée de l'opérateur + (+=) est inefficace pour les grands ensembles de données, car elle crée une nouvelle chaîne à chaque fois. À la place, l'utilisation de str.join() est beaucoup plus rapide et consomme moins de mémoire.

Comparaison des performances de deux approches pour concaténer des chaînes avec des caractères de nouvelle ligne dans une seule chaîne. La première utilise une boucle for avec l'opérateur +=, tandis que la seconde exploite la méthode plus efficace str.join().

1234567891011121314151617181920212223
import os decorators = os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Simulated lines of a report lines = [f"Line {i}" for i in range(1, 1000001)] # Inefficient concatenation @timeit_decorator(number=50) def concat_with_plus(): result = "" for line in lines: result += line + "\n" return result # Efficient concatenation @timeit_decorator(number=50) def concat_with_join(): return "\n".join(lines) + "\n" # Add final newline for consistency result_plus = concat_with_plus() result_join = concat_with_join() print(result_plus == result_join)
copy

Précompilation des expressions régulières

Lors de l'utilisation d'expressions régulières, les performances peuvent devenir un enjeu, en particulier lors du traitement de grands ensembles de données ou de correspondances de motifs répétitives. Dans ces cas, précompiler le motif constitue une technique d'optimisation utile.

La précompilation garantit que le moteur d'expressions régulières ne recompile pas le motif à chaque utilisation, ce qui peut améliorer considérablement les performances lorsque le même motif est appliqué plusieurs fois sur un ensemble de données. Cette méthode est particulièrement avantageuse dans des situations telles que le filtrage, la validation ou la recherche dans de grands fichiers texte.

Comparons les performances de deux méthodes pour valider des noms d'utilisateur à l'aide d'expressions régulières. La première méthode utilise la fonction re.match avec le motif défini en ligne à chaque appel. La seconde, plus efficace, précompile le motif regex à l'aide de re.compile et le réutilise pour toutes les validations.

1234567891011121314151617181920212223
import os import re decorators = os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Simulated usernames usernames = ["user123", "admin!@#", "test_user", "invalid!"] * 100000 # Naive approach @timeit_decorator(number=10) def validate_with_re(): pattern = r"^\w+$" return [bool(re.match(pattern, username)) for username in usernames] # Optimized approach @timeit_decorator(number=10) def validate_with_compiled_re(): compiled_pattern = re.compile(r"^\w+$") return [bool(compiled_pattern.match(username)) for username in usernames] result_without_precompiling = validate_with_re() result_with_precompiling = validate_with_compiled_re() print(result_without_precompiling == result_with_precompiling)
copy

1. Vous générez un rapport de 10000 lignes, où chaque ligne représente un résumé de transaction. Quelle méthode est la plus efficace pour combiner ces lignes en une seule chaîne avec ; comme séparateur ?

2. Pourquoi la précompilation d'une expression régulière avec re.compile() est-elle souvent plus rapide que l'utilisation de re.match() avec un motif en ligne ?

question mark

Vous générez un rapport de 10000 lignes, où chaque ligne représente un résumé de transaction. Quelle méthode est la plus efficace pour combiner ces lignes en une seule chaîne avec ; comme séparateur ?

Select the correct answer

question mark

Pourquoi la précompilation d'une expression régulière avec re.compile() est-elle souvent plus rapide que l'utilisation de re.match() avec un motif en ligne ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 4
some-alt