En Python, les compréhensions de liste vous permettent de créer une nouvelle liste à partir d’une liste de chaînes existantes en extrayant, en remplaçant ou en transformant des éléments qui satisfont à certaines conditions.
- Compréhensions de listes
- Extraire les chaînes qui contiennent ou ne contiennent pas une sous-chaîne spécifique
- Remplacer les chaînes spécifiques dans une liste
- Extraire les chaînes qui commencent ou ne commencent pas par une chaîne spécifique
- Extraire les chaînes qui se terminent ou ne se terminent pas par une chaîne spécifique
- Extraire les chaînes en respectant la casse
- Convertir la casse des chaînes
- Extraire des chaînes par ordre alphabétique ou numérique
- Conditions multiples
- Expression régulière (regex)
Consultez l’article suivant pour plus d’informations sur la façon d’extraire et de remplacement des chaînes.
- Extraire une sous-chaîne d’une chaîne en Python (position, regex)
- Remplacer des chaînes en Python (remplacer, traduire, re.sub, re.subn)
Compréhensions de listes
Les compréhensions de listes offrent une alternative plus simple à la boucle 𝐟𝐨𝐫 traditionnelle lors de la création de nouvelles listes.
[expression for variable_name in iterable if condition]
Pour extraire les éléments qui répondent aux critères 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 , vous n’avez pas besoin de les traiter avec 𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧 ; utiliser simplement 𝐯𝐚𝐫𝐢𝐚𝐛𝐥𝐞_𝐧𝐚𝐦𝐞 .
[variable_name for variable_name in iterable if condition]
Si vous remplacez 𝐢𝐟 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 par 𝐢𝐟 𝐧𝐨𝐭 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 , vous pouvez extraire les éléments qui ne satisfont pas 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 , c’est-à-dire exclure les éléments qui satisfont 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 .
Pour plus d’informations sur l’extraction, le remplacement et la conversion d’éléments de liste à l’aide de compréhension de liste, veuillez vous référer à l’article suivant.
Extraire les chaînes qui contiennent ou ne contiennent pas une sous-chaîne spécifique
Vous pouvez utiliser l’opérateur 𝐢𝐧 pour vérifier si une chaîne contient une sous-chaîne spécifique.
La syntaxe 𝐢𝐧 𝐭𝐚𝐫𝐠𝐞𝐭_𝐬𝐭𝐫𝐢𝐧𝐠 est à carrière T𝐫𝐮𝐞 si le 𝐭𝐚𝐫𝐠𝐞𝐭_𝐬𝐭𝐫𝐢𝐧𝐠 contient le . . Pour la négation, vous pouvez utiliser 𝐧𝐨𝐭 𝐢𝐧 .
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222'] l_in = [s for s in l if 'XXX' in s] print(l_in) # ['oneXXXaaa', 'twoXXXbbb'] l_in_not = [s for s in l if 'XXX' not in s] print(l_in_not) # ['three999aaa', '000111222']
Remplacer les chaînes spécifiques dans une liste
Pour remplacer une chaîne dans les éléments d’une liste, utilisez la méthode 𝐫𝐞𝐩𝐥𝐚𝐜𝐞() avec la compréhension de liste. S’il n’y a pas de chaîne correspondante à remplacer, l’utilisation de 𝐫𝐞𝐩𝐥𝐚𝐜𝐞() n’entraînera aucun changement. Par conséquent, vous n’avez pas besoin de filtrer les éléments avec 𝐢𝐟 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 .
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222'] l_replace = [s.replace('XXX', 'ZZZ') for s in l] print(l_replace) # ['oneZZZaaa', 'twoZZZbbb', 'three999aaa', '000111222']
Pour remplacer l’élément entier contenant une chaîne spécifique, utilisez l’opérateur 𝐢𝐧 pour l’extraire et appliquez des expressions conditionnelles (opérateur ternaire), formatées comme X 𝐢𝐟 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 𝐞𝐥𝐬𝐞 Y .
Utilisez des expressions conditionnelles pour la partie 𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧 des compréhensions de listes.
l_replace_all = ['ZZZ' if 'XXX' in s else s for s in l] print(l_replace_all) # ['ZZZ', 'ZZZ', 'three999aaa', '000111222']
Les parenthèses peuvent améliorer la lisibilité du code et réduire les erreurs potentielles, bien que leur utilisation soit grammaticalement facultative.
[('ZZZ' if ('XXX' in s) else s) for s in l]
Extraire les chaînes qui commencent ou ne commencent pas par une chaîne spécifique
La méthode 𝐬𝐭𝐚𝐫𝐭𝐬𝐰𝐢𝐭𝐡() renvoie T𝐫𝐮𝐞 si la chaîne commence par la chaîne spécifique.
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222'] l_start = [s for s in l if s.startswith('t')] print(l_start) # ['twoXXXbbb', 'three999aaa'] l_start_not = [s for s in l if not s.startswith('t')] print(l_start_not) # ['oneXXXaaa', '000111222']
Extraire les chaînes qui se terminent ou ne se terminent pas par une chaîne spécifique
La méthode 𝐞𝐧𝐝𝐬𝐰𝐢𝐭𝐡() renvoie T𝐫𝐮𝐞 si la chaîne se termine par la chaîne spécifique.
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222'] l_end = [s for s in l if s.endswith('aaa')] print(l_end) # ['oneXXXaaa', 'three999aaa'] l_end_not = [s for s in l if not s.endswith('aaa')] print(l_end_not) # ['twoXXXbbb', '000111222']
Extraire les chaînes en respectant la casse
Vous pouvez utiliser les méthodes 𝐢𝐬𝐮𝐩𝐩𝐞𝐫() et 𝐢𝐬𝐥𝐨𝐰𝐞𝐫() pour vérifier si une chaîne est entièrement en majuscules ou en minuscules.
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222'] l_lower = [s for s in l if s.islower()] print(l_lower) # ['three999aaa']
Convertir la casse des chaînes
Pour convertir tous les caractères d’une chaîne en majuscules ou en minuscules, utilisez les méthodes 𝐮𝐩𝐩𝐞𝐫() ou 𝐥𝐨𝐰𝐞𝐫() . Python fournit également d’autres méthodes, telles que 𝐜𝐚𝐩𝐢𝐭𝐚𝐥𝐢𝐳𝐞() pour mettre la première lettre en majuscule, et 𝐬𝐰𝐚𝐩𝐜𝐚𝐬𝐞() pour inverser la casse de tous les caractères d’une chaîne.
Utilisez des expressions conditionnelles pour convertir uniquement les éléments qui satisfont aux conditions.
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222'] l_upper_all = [s.upper() for s in l] print(l_upper_all) # ['ONEXXXAAA', 'TWOXXXBBB', 'THREE999AAA', '000111222'] l_lower_to_upper = [s.upper() if s.islower() else s for s in l] print(l_lower_to_upper) # ['oneXXXaaa', 'twoXXXbbb', 'THREE999AAA', '000111222']
Extraire des chaînes par ordre alphabétique ou numérique
Vous pouvez utiliser les méthodes 𝐢𝐬𝐚𝐥𝐩𝐡𝐚() et 𝐢𝐬𝐧𝐮𝐦𝐞𝐫𝐢𝐜() pour vérifier si une chaîne est entièrement alphabétique ou entièrement numérique.
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222'] l_isalpha = [s for s in l if s.isalpha()] print(l_isalpha) # ['oneXXXaaa', 'twoXXXbbb'] l_isnumeric = [s for s in l if s.isnumeric()] print(l_isnumeric) # ['000111222']
Conditions multiples
Dans la partie 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 de la compréhension de liste, vous pouvez définir plusieurs conditions à l’aide de 𝐚𝐧𝐝 , 𝐨𝐫 et 𝐧𝐨𝐭 .
Lorsque vous travaillez avec plus de trois conditions, il est plus sûr d’entourer chaque groupe de () pour garantir des résultats précis, car l’ordre d’exécution peut avoir un impact sur le résultat.
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222'] l_multi = [s for s in l if s.isalpha() and not s.startswith('t')] print(l_multi) # ['oneXXXaaa'] l_multi_or = [s for s in l if (s.isalpha() and not s.startswith('t')) or ('bbb' in s)] print(l_multi_or) # ['oneXXXaaa', 'twoXXXbbb']
Expression régulière (regex)
Vous pouvez utiliser des expressions régulières (regex) pour une recherche et une manipulation de modèles plus flexibles.
La fonction 𝐫𝐞.𝐦𝐚𝐭𝐜𝐡() renvoie un objet 𝐦𝐚𝐭𝐜𝐡 si une correspondance est trouvée et None dans le cas contraire.
Étant donné que les objets 𝐦𝐚𝐭𝐜𝐡 sont évalués comme T𝐫𝐮𝐞 et N𝐨𝐧𝐞 comme F𝐚𝐥𝐬𝐞 , si vous souhaitez extraire des éléments qui correspondent à un modèle regex, vous devez appliquer 𝐫𝐞.𝐦𝐚𝐭𝐜𝐡() à 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 fait partie des listes de compréhension comme dans les exemples précédents.
import re l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222'] l_re_match = [s for s in l if re.match('.*XXX.*', s)] print(l_re_match) # ['oneXXXaaa', 'twoXXXbbb']
Vous pouvez également utiliser 𝐫𝐞.𝐬𝐮𝐛() pour remplacer les parties qui correspondent à un modèle d’expression régulière. Si vous souhaitez extraire et remplacer uniquement les éléments correspondants, ajoutez 𝐢𝐟 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 .
l_re_sub_all = [re.sub('(.*)XXX(.*)', r'\2---\1', s) for s in l] print(l_re_sub_all) # ['aaa---one', 'bbb---two', 'three999aaa', '000111222'] l_re_sub = [re.sub('(.*)XXX(.*)', r'\2---\1', s) for s in l if re.match('.*XXX.*', s)] print(l_re_sub) # ['aaa---one', 'bbb---two']