41 questions de manipulation de chaînes en Python

J'ai commencé à garder une liste des fonctions les plus fréquemment utilisées, résolvant des problèmes algorithmiques sur LeetCode et HackerRank.

Être un bon programmeur ne signifie pas se souvenir de toutes les fonctions intégrées d'un certain langage. Mais cela ne signifie pas que leur mémorisation est inutile. Surtout - quand il s'agit de préparer un entretien.

Aujourd'hui, je veux partager avec tous ceux qui veulent ma feuille de triche pour travailler avec des chaînes en Python. Je l'ai conçu comme une liste de questions, que j'utilise pour l'auto-test. Bien que ces questions ne soient pas attirées par les tâches à part entière proposées lors des entretiens, leur développement vous aidera à résoudre de vrais problèmes de programmation.



1. Comment vérifier l'identité de deux objets?


L'opérateur isretourne Truesi une référence à la même zone mémoire est écrite dans deux variables. C'est ce dont nous parlons lorsque nous parlons de «l'identité des objets».

Ne confondez pas iset ==. L'opérateur ==vérifie uniquement l'égalité des objets.

animals           = ['python','gopher']
more_animals      = animals
print(animals == more_animals) #=> True
print(animals is more_animals) #=> True
even_more_animals = ['python','gopher']
print(animals == even_more_animals) #=> True
print(animals is even_more_animals) #=> False

Faites attention au fait animalsqu'ils even_more_animalsne sont pas identiques, bien qu'ils soient égaux les uns aux autres.

De plus, il existe une fonction id()qui retourne l'identifiant de l'adresse mémoire associée au nom de la variable. Lorsque cette fonction est appelée, le même identifiant sera retourné pour deux objets identiques.

name = 'object'
id(name)
#=> 4408718312

2. Comment vérifier que chaque mot d'une ligne commence par une majuscule?


Il existe une méthode de chaîne istitle()qui vérifie si chaque mot d'une chaîne commence par une majuscule.

print( 'The Hilton'.istitle() ) #=> True
print( 'The dog'.istitle() ) #=> False
print( 'sticky rice'.istitle() ) #=> False

3. Comment vérifier une chaîne pour une autre chaîne en elle?


Il y a une instruction inqui retournera Truesi la chaîne contient la chaîne de recherche.

print( 'plane' in 'The worlds fastest plane' ) #=> True
print( 'car' in 'The worlds fastest plane' ) #=> False

4. Comment trouver l'index de la première occurrence d'une sous-chaîne dans une chaîne?


Il existe deux méthodes qui renvoient l'index de la première occurrence d'une sous-chaîne dans une chaîne. C'est find()et index(). Chacun d'eux a certaines fonctionnalités.

La méthode find()renvoie -1si la sous-chaîne requise dans la chaîne n'est pas trouvée.

'The worlds fastest plane'.find('plane') #=> 19
'The worlds fastest plane'.find('car') #=> -1

Une méthode index()dans une telle situation génère une erreur ValueError.

'The worlds fastest plane'.index('plane') #=> 19
'The worlds fastest plane'.index('car') #=> ValueError: substring not found

5. Comment compter le nombre de caractères dans une chaîne?


La fonction len()renvoie la longueur de la chaîne.

len('The first president of the organization..') #=> 41

6. Comment compter combien de fois un certain caractère apparaît dans une chaîne?


La méthode count()qui renvoie le nombre d'occurrences dans la chaîne du caractère spécifié nous aidera à répondre à cette question .

'The first president of the organization..'.count('o') #=> 3

7. Comment faire le premier caractère de la chaîne en majuscule?


Pour ce faire, vous pouvez utiliser la méthode capitalize().

'florida dolphins'.capitalize() #=> 'Florida dolphins'

8. Que sont les lignes f et comment les utiliser?


Python 3.6 introduit une nouvelle fonctionnalité, les soi-disant "f-strings". Leur utilisation simplifie considérablement l'interpolation de chaînes. L'utilisation des lignes f ressemble à l'application d'une méthode format().

Lorsque des lignes f sont déclarées, une lettre est écrite avant le guillemet d'ouverture f.

name = 'Chris'
food = 'creme brulee'
f'Hello. My name is {name} and I like {food}.'
#=> 'Hello. My name is Chris and I like creme brulee'

9. Comment trouver une sous-chaîne dans une partie donnée d'une chaîne?


La méthode index()peut être appelée en lui passant des arguments facultatifs, représentant l'index du fragment initial et final de la chaîne, dans lequel vous devez rechercher une sous-chaîne.

'the happiest person in the whole wide world.'.index('the',10,44)
#=> 23

Faites attention au fait que les retours de construction ci-dessus 23, et non 0, pour ainsi dire, ne limiteraient pas notre recherche.

'the happiest person in the whole wide world.'.index('the')
#=> 0

10. Comment insérer le contenu d'une variable dans une chaîne en utilisant la méthode format ()?


La méthode format()vous permet d'obtenir des résultats similaires à ceux qui peuvent être obtenus en utilisant les lignes F. Certes, je pense que ce n'est format()pas si pratique à utiliser, car toutes les variables doivent être spécifiées comme arguments format().

difficulty = 'easy'
thing = 'exam'
'That {} was {}!'.format(thing, difficulty)
#=> 'That exam was easy!'

11. Comment savoir si une chaîne ne contient que des chiffres?


Il existe une méthode isnumeric()qui renvoie Truesi tous les caractères de la chaîne sont des nombres.

'80000'.isnumeric() #=> True

En utilisant cette méthode, gardez à l'esprit qu'il ne compte pas les signes de ponctuation comme des nombres.

'1.0'.isnumeric() #=> False

12. Comment diviser une chaîne par un caractère donné?


Ici, nous serons aidés par une méthode split()qui casse une chaîne par un caractère donné ou par plusieurs caractères.

'This is great'.split(' ')
#=> ['This', 'is', 'great']
'not--so--great'.split('--')
#=> ['not', 'so', 'great']

13. Comment vérifier qu'une chaîne est composée uniquement de lettres minuscules?


La méthode ne islower()renvoie Trueque si la chaîne est composée uniquement de lettres minuscules.

'all lower case'.islower() #=> True
'not aLL lowercase'.islower() # False

14. Comment vérifier qu'une chaîne commence par une lettre minuscule?


Cela peut être fait en appelant la méthode ci-dessus islower()pour le premier caractère de la chaîne.

'aPPLE'[0].islower() #=> True

15. Est-il possible en Python d'ajouter un entier à une chaîne?


Cela est possible dans certains langages, mais Python générera une erreur lors de la tentative d'exécution d'une opération similaire TypeError.

'Ten' + 10 #=> TypeError

16. Comment «retourner» une ligne?


Pour «inverser» une ligne, elle peut être divisée en la présentant comme une liste de caractères, «inverser» la liste et, en combinant ses éléments, former une nouvelle ligne.

''.join(reversed("hello world"))
#=> 'dlrow olleh'

17. Comment combiner la liste des lignes en une seule ligne dont les éléments sont séparés par des tirets?


La méthode join()peut combiner des éléments de liste en chaînes, en séparant les chaînes individuelles à l'aide du caractère spécifié.

'-'.join(['a','b','c'])
#=> 'a-b-c'

18. Comment savoir que tous les caractères d'une chaîne sont en ASCII?


La méthode isascii()renvoie Truesi tous les caractères de la chaîne sont en ASCII.

print( 'Â'.isascii() ) #=> False
print( 'A'.isascii() ) #=> True

19. Comment convertir la chaîne entière en majuscules ou minuscules?


Pour résoudre ces problèmes, vous pouvez utiliser les méthodes upper()et lower(), respectivement, conduire tous les caractères des chaînes en majuscules et minuscules.

sentence = 'The Cat in the Hat'
sentence.upper() #=> 'THE CAT IN THE HAT'
sentence.lower() #=> 'the cat in the hat'

20. Comment convertir les premier et dernier caractères d'une chaîne en majuscules?


Ici, comme dans l'un des exemples précédents, nous ferons référence aux caractères de la chaîne par index. Les lignes en Python sont immuables, nous allons donc construire de nouvelles lignes basées sur celles existantes.

animal = 'fish'
animal[0].upper() + animal[1:-1] + animal[-1].upper()
#=> 'FisH'

21. Comment vérifier qu'une chaîne est composée uniquement de majuscules?


Il existe une méthode isupper()similaire à celle déjà envisagée islower(). Mais ne isupper()renvoie Trueque si la chaîne entière est constituée de lettres majuscules.

'Toronto'.isupper() #=> False
'TORONTO'.isupper() #= True

22. Dans quelle situation utiliseriez-vous la méthode splitlines ()?


La méthode splitlines()sépare les chaînes par des caractères de saut de ligne.

sentence = "It was a stormy night\nThe house creeked\nThe wind blew."
sentence.splitlines()
#=> ['It was a stormy night', 'The house creeked', 'The wind blew.']

23. Comment obtenir une tranche de ligne?


Pour obtenir une tranche d'une chaîne, la syntaxe suivante est utilisée:

string[start_index:end_index:step]

Voici stepl'étape avec laquelle les caractères de chaîne d'une plage seront retournés start_index:end_index. Une stepvaleur de 3 indique que chaque troisième caractère sera retourné.

string = 'I like to eat apples'
string[:6] #=> 'I like'
string[7:13] #=> 'to eat'
string[0:-1:2] #=> 'Ilk oetape' ( 2- )

24. Comment convertir un entier en chaîne?


Vous pouvez utiliser le constructeur pour convertir un nombre en chaîne str().

str(5) #=> '5'

25. Comment puis-je savoir qu'une chaîne ne contient que des caractères alphabétiques?


La méthode isalpha()renvoie Truesi tous les caractères de la chaîne sont des lettres.

'One1'.isalpha() #=> False
'One'.isalpha() #=> True

26. Comment remplacer toutes les occurrences d'une certaine sous-chaîne dans une ligne donnée?


Si vous le faites sans exporter un module qui vous permet de travailler avec des expressions régulières, vous pouvez utiliser la méthode pour résoudre ce problème replace().

sentence = 'Sally sells sea shells by the sea shore'
sentence.replace('sea', 'mountain')
#=> 'Sally sells mountain shells by the mountain shore'

27. Comment retourner un caractère d'une ligne avec le code ASCII minimum?


Si vous regardez les codes ASCII des éléments, il s'avère, par exemple, que les lettres majuscules ont des codes inférieurs aux minuscules. La fonction min()renvoie le caractère de la chaîne ayant le code le plus petit.

min('strings') #=> 'g'

28. Comment vérifier qu'une chaîne ne contient que des caractères alphanumériques?


Les caractères alphanumériques comprennent les lettres et les chiffres. Pour répondre à cette question, vous pouvez utiliser la méthode isalnum().

'Ten10'.isalnum() #=> True
'Ten10.'.isalnum() #=> False

29. Comment supprimer des espaces du début d'une ligne (de son côté gauche), de sa fin (du côté droit) ou des deux côtés d'une ligne?


Ici, les méthodes lstrip(), rstrip()et , respectivement, sont utiles pour nous strip().

string = '  string of whitespace    '
string.lstrip() #=> 'string of whitespace    '
string.rstrip() #=> '  string of whitespace'
string.strip() #=> 'string of whitespace'

30. Comment vérifier qu'une chaîne commence par une séquence de caractères donnée ou se termine par une séquence de caractères donnée?


Pour répondre à cette question, vous pouvez recourir respectivement aux méthodes startswith()et endswith().

city = 'New York'
city.startswith('New') #=> True
city.endswith('N') #=> False

31. Comment encoder une chaîne en ASCII?


La méthode encode()vous permet d'encoder des chaînes en utilisant l'encodage spécifié. L'encodage par défaut est utilisé utf-8. Si un certain caractère ne peut pas être représenté à l'aide du codage spécifié, une erreur sera générée UnicodeEncodeError.

'Fresh Tuna'.encode('ascii')
#=> b'Fresh Tuna'
'Fresh Tuna Â'.encode('ascii')
#=> UnicodeEncodeError: 'ascii' codec can't encode character '\xc2' in position 11: ordinal not in range(128)

32. Comment puis-je savoir qu'une chaîne ne comprend que des espaces?


Il existe une méthode isspace()qui Truene renvoie que si la chaîne se compose uniquement d'espaces.

''.isspace() #=> False
' '.isspace() #=> True
'   '.isspace() #=> True
' the '.isspace() #=> False

33. Que se passe-t-il si vous multipliez une ligne par 3?


Une nouvelle ligne sera créée, représentant la ligne d'origine répétée trois fois.

'dog' * 3
# 'dogdogdog'

34. Comment mettre en majuscule le premier caractère de chaque mot dans une chaîne?


Il existe une méthode title()qui met en majuscule la première lettre de chaque mot d'une chaîne.

'once upon a time'.title() #=> 'Once Upon A Time'

35. Comment combiner deux lignes?


Vous pouvez utiliser l'opérateur pour concaténer des chaînes +.

'string one' + ' ' + 'string two' 
#=> 'string one string two'

36. Comment utiliser la méthode partition ()?


La méthode partition()rompt la chaîne par la sous-chaîne donnée. Après cela, le résultat est renvoyé sous forme de tuple. De plus, la sous-chaîne le long de laquelle la panne a été effectuée est également incluse dans le tuple.

sentence = "If you want to be a ninja"
print(sentence.partition(' want '))
#=> ('If you', ' want ', 'to be a ninja')

37. Les lignes en Python sont immuables. Qu'est-ce que ça veut dire?


Le fait que les chaînes soient immuables suggère qu'une fois un objet chaîne créé, il ne peut pas être modifié. Lors de la «modification» de chaînes, les chaînes d'origine ne changent pas. Au lieu de cela, des objets complètement nouveaux sont créés en mémoire. Vous pouvez le prouver en utilisant la fonction id().

proverb = 'Rise each day before the sun'
print( id(proverb) )
#=> 4441962336
proverb_two = 'Rise each day before the sun' + ' if its a weekday'
print( id(proverb_two) )
#=> 4442287440

Lors de la concaténation 'Rise each day before the sun'et ' if its a weekday'en mémoire, un nouvel objet est créé avec un nouvel identifiant. Si l'objet d'origine devait changer, alors les objets auraient le même identifiant.

38. Si vous déclarez deux fois la même ligne (en l'écrivant dans 2 variables différentes) - combien d'objets seront créés en mémoire? 1 ou 2?


Un exemple d'un tel travail avec des chaînes est le fragment de code suivant:

animal = 'dog'
pet = 'dog'

Avec cette approche, un seul objet est créé en mémoire. Quand je suis tombé sur cela pour la première fois, cela ne me semblait pas intuitif. Mais ce mécanisme aide Python à économiser de la mémoire lorsque vous travaillez avec de longues chaînes.

Cela peut être prouvé en recourant à une fonction id().

animal = 'dog'
print( id(animal) )
#=> 4441985688
pet = 'dog'
print( id(pet) )
#=> 4441985688

39. Comment utiliser les méthodes maketrans () et translate ()?


La méthode maketrans()vous permet de décrire le mappage d'un caractère à un autre, en retournant une table de conversion.

La méthode translate()vous permet d'appliquer la table spécifiée pour convertir la chaîne.

#  
mapping = str.maketrans("abcs", "123S")
#  
"abc are the first three letters".translate(mapping)
#=> '123 1re the firSt three letterS'

S'il vous plaît noter que la barre est en remplacement des symboles a, b, cet s, respectivement, les symboles 1, 2, 3et S.

40. Comment supprimer les voyelles d'une chaîne?


Une réponse à cette question est que les caractères d'une chaîne sont triés à l'aide du mécanisme de compréhension de liste. Les symboles sont vérifiés en les comparant à un tuple contenant des voyelles. Si le caractère n'est pas inclus dans le tuple, il est ajouté à une nouvelle ligne.

string = 'Hello 1 World 2'
vowels = ('a','e','i','o','u')
''.join([c for c in string if c not in vowels])
#=> 'Hll 1 Wrld 2'

41. Dans quelles situations utilisez-vous la méthode rfind ()?


La méthode rfind()est similaire à la méthode find(), mais, contrairement à find()elle, elle analyse la chaîne non pas de gauche à droite, mais de droite à gauche, renvoyant l'index de la première occurrence trouvée de la sous-chaîne requise.

story = 'The price is right said Bob. The price is right.'
story.rfind('is')
#=> 39

Sommaire


J'explique souvent à un chef de produit, une personne âgée, que les développeurs ne sont pas des dictionnaires qui stockent des descriptions de méthodes objet. Mais plus le développeur se souvient des méthodes, moins il aura besoin de google, et plus il travaillera rapidement et agréablement. J'espère que maintenant vous pourrez facilement répondre aux questions discutées ici.

Chers lecteurs! Qu'en est-il de la gestion des chaînes en Python, conseilleriez-vous à ceux qui se préparent pour une interview?


All Articles