Bonjour,
J'aimerais que dans une liste d'éléments, la première lettre de chaque mot soit en majuscule. Par exemple pour la liste suivante : liste = ["PEDro poula","moli melo"] on obtiendrait liste = ["Pedro Poula","Meli Melo"].
Merci par avance
Version imprimable
Bonjour,
J'aimerais que dans une liste d'éléments, la première lettre de chaque mot soit en majuscule. Par exemple pour la liste suivante : liste = ["PEDro poula","moli melo"] on obtiendrait liste = ["Pedro Poula","Meli Melo"].
Merci par avance
Bonsoir,
Avec capwords :
Code:
1
2
3
4
5 s="meli melo" from string import capwords print (capwords(s)) Meli Melo
Je préfère une méthode purement "algorithmique".
J'avais plus pensé à quelque chose comme cela :
Mais j'avais obtenu une erreur.Code:
1
2
3
4 liste = ["PEDro poula","moli melo"] for i in range(len(liste)-1): if liste[i][0]: liste[i][0] = liste[i][0].upper()
Par exemple dans la console :
Mais si tu as "meli melo" et qu'il faut "Meli Melo", il faut commencer par séparer les deux mots :Code:
1
2
3
4
5
6
7
8
9
10 In [1]: s="meli" In [2]: s[0].upper() Out[2]: 'M' In [3]: s[1:] Out[3]: 'eli' In [4]: s[0].upper()+s[1:] Out[4]: 'Meli'
Si tu n'as pas le droit à split()...Code:
1
2
3
4 In [5]: s="meli melo" In [6]: s.split() Out[6]: ['meli', 'melo']
Oui, je veux faire 'Meli Melo', j'ai donc conçu ce code :
mais j'obtiens l'erreur suivante :Code:
1
2
3 liste = ["meli","melo"] for i in range(len(liste)-1): print(liste[i].upper()+liste[1:], end="")
Citation:
file "./prog.py", line 3, in <module>
TypeError: Can't convert 'list' object to str implicitly
C'est seulement la première lettre qu'il faut mettre en majuscule.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 liste = ["meli","melo"] liste[0] 'meli' liste[1] 'melo' liste[0].upper() 'MELI' liste[0][0].upper() 'M'
Le message d'erreur vient de liste[1:], il faut d'abord récupérer liste[i] avant d'extraire la sous-chaîne : liste[i][1:].
Bonjour,
Ou bien…
ClodionCode:
1
2
3
4
5
6
7 >>> lst = ["meli","melo"] >>> for i in lst: print(i[0].upper()+i[1:], end=" ") Meli Melo >>>
MAJ: Hors sujet, j'avais mal lu. Je croyais qu'il fallait conserver les autres lettres en majuscules.
Voici une version qui tient sur une ligne :
Pour tester tous les cas :
liste = ["PEDro poula","moli melo", "c", "", "3"]
On extrait chaque élément / mots, puis on sépare/split en fonction de l'espace chaque mot on les mets en majuscule et on joint le tout avec un espace.Code:
1
2 [' '.join([mot[0:1].upper() + mot[1:] for mot in mots.split(" ")]) for mots in liste]
Pas besoin de vérifier la condition if len(mot) > 1, le slicing ne retourne pas d'IndexError.
Sinon par curiosité ça donnerait ceci :
Ne retourne rien si la condition len() > 1 est fausse, la valeur sera une str de longueur 0: ''Code:
1
2 [' '.join([mot[0].upper() + mot[1:] for mot in mots.split(" ") if len(mot) > 1]) or mots.upper() for mots in liste]
or mots remplace la chaîne vide par sa valeur mots.upper().
Mais ça devient un peu lourd à lire.
Je viens de relire, il ne faut pas de fonction split? On peut toujours utiliser index sinon.
Salut,
juste pour info, en Python le type chaine propose une méthode capitalize() qui permet justement de retourner une version de la chaine avec le premier caractère en majuscule et les autres en minuscule.
Code:
1
2
3
4
5 une_chaine = "tOto" une_chaine.capitalize() # affiche 'Toto' # c'est un poil plus propre que une_chaine[:1].upper() + une chaine[1:].lower()
Humm j'avais cru comprendre qu'il voulait conserver les majuscules et simplement appliquer des capitales sur les mots sans modifier le reste.
On s'est effectivement pris la tête pour rien, ça m'apprendra à lire trop vite le sujet.:D
Si on veut faire de l'algorithmie, il faut :
- Prévoir tous les cas de figures (il y en a un bon paquet)
- Éviter les fonctions du genre upper comme dans le post n°3
- Prévoir l'éventualité d'un code lent
- Faire du C en gros
Python s'y prête bien, à condition de faire l'exercice sur papier pour ne rien oublier... Utiliser les bytearray semblent être la solution la plus propre pour cet exercice.
Bonne continuation...
Bonjour,
Je vous remercie pour vos réponses diverses et très bien détaillées :)
A bientôt.
salut,
peut être une méthode plus élégante
[mohamed@archlaptop ~]$ bpython2
bpython version 0.14.1 on top of Python 2.7.10 /usr/bin/python2
>>> liste = ["PEDro poula","moli melo"]
>>> [x.title() for x in liste]
['Pedro Poula', 'Moli Melo']
>>>
:roll:
"Simple is better than complex."