J'ai une variable de liste python qui contient des chaînes. Existe-t-il une fonction python qui peut convertir toutes les chaînes en une seule passe en minuscules et vice versa, en majuscules?
J'ai une variable de liste python qui contient des chaînes. Existe-t-il une fonction python qui peut convertir toutes les chaînes en une seule passe en minuscules et vice versa, en majuscules?
Réponses:
Cela peut être fait avec des listes de compréhension. Celles-ci prennent essentiellement la forme de [function-of-item for item in some-list]
. Par exemple, pour créer une nouvelle liste où tous les éléments sont en minuscules (ou en majuscules dans le deuxième extrait), vous utiliseriez:
>>> [x.lower() for x in ["A","B","C"]]
['a', 'b', 'c']
>>> [x.upper() for x in ["a","b","c"]]
['A', 'B', 'C']
Vous pouvez également utiliser la map
fonction:
>>> map(lambda x:x.lower(),["A","B","C"])
['a', 'b', 'c']
>>> map(lambda x:x.upper(),["a","b","c"])
['A', 'B', 'C']
list(map(lambda x:x.upper(),["a","b","c"]))
map(str.lower, ["A","B","C"])
En plus d'être plus faciles à lire (pour beaucoup de gens), les listes de compréhension gagnent aussi la course de vitesse:
$ python2.6 -m timeit '[x.lower() for x in ["A","B","C"]]'
1000000 loops, best of 3: 1.03 usec per loop
$ python2.6 -m timeit '[x.upper() for x in ["a","b","c"]]'
1000000 loops, best of 3: 1.04 usec per loop
$ python2.6 -m timeit 'map(str.lower,["A","B","C"])'
1000000 loops, best of 3: 1.44 usec per loop
$ python2.6 -m timeit 'map(str.upper,["a","b","c"])'
1000000 loops, best of 3: 1.44 usec per loop
$ python2.6 -m timeit 'map(lambda x:x.lower(),["A","B","C"])'
1000000 loops, best of 3: 1.87 usec per loop
$ python2.6 -m timeit 'map(lambda x:x.upper(),["a","b","c"])'
1000000 loops, best of 3: 1.87 usec per loop
map
gagne la course, mais ne fait rien :)
map(str.lower,["A","B","C"])
est le plus rapide est python3.7.5
>>> map(str.lower,["A","B","C"])
['a', 'b', 'c']
str.upper
pour se convertir en majuscules
La compréhension de la liste est la façon dont je le ferais, c'est la manière "Pythonique". La transcription suivante montre comment convertir une liste en majuscules puis en bas:
pax@paxbox7:~$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x = ["one", "two", "three"] ; x
['one', 'two', 'three']
>>> x = [element.upper() for element in x] ; x
['ONE', 'TWO', 'THREE']
>>> x = [element.lower() for element in x] ; x
['one', 'two', 'three']
list
comme nom de variable n'est pas le meilleur choix :)
list
trucs :)) D'où pensez-vous que les UV que vous avez récemment obtenus viennent? :)
Pour cet exemple, la compréhension est la plus rapide
$ python -m timeit -s 's = ["un", "deux", "trois"] * 1000' '[x.upper pour x en s]' 1000 boucles, meilleur de 3: 809 usec par boucle $ python -m timeit -s 's = ["un", "deux", "trois"] * 1000' 'map (str.upper, s)' 1000 boucles, meilleur de 3: 1,12 ms par boucle $ python -m timeit -s 's = ["un", "deux", "trois"] * 1000' 'map (lambda x: x.upper (), s)' 1000 boucles, meilleur de 3: 1,77 msec par boucle
Solution:
>>> s = []
>>> p = ['This', 'That', 'There', 'is', 'apple']
>>> [s.append(i.lower()) if not i.islower() else s.append(i) for i in p]
>>> s
>>> ['this', 'that', 'there', 'is','apple']
Cette solution créera une liste séparée contenant les éléments en minuscules, quel que soit leur cas d'origine. Si le boîtier d'origine est supérieur, le list s
contenu contiendra des minuscules de l'élément respectif dans list p
. Si la casse d'origine de l'élément de liste est déjà en minuscules, list p
le list s
conserve la casse de l'élément et la conserve en minuscules. Vous pouvez maintenant utiliser à la list s
place de list p
.
Si votre but est de faire correspondre une autre chaîne en convertissant en un seul passage, vous pouvez également l'utiliser str.casefold()
.
Ceci est utile lorsque vous avez des caractères non-ascii et que vous les associez à des versions ascii (par exemple: maße vs masse). Bien que cela échoue str.lower
ou str.upper
échoue dans ce cas, str.casefold()
passera. Ceci est disponible dans Python 3 et l'idée est discutée en détail avec la réponse https://stackoverflow.com/a/31599276/4848659 .
>>>str="Hello World";
>>>print(str.lower());
hello world
>>>print(str.upper());
HELLO WOLRD
>>>print(str.casefold());
hello world
Vous pouvez essayer d'utiliser:
my_list = ['india', 'america', 'china', 'korea']
def capitalize_list(item):
return item.upper()
print(list(map(capitalize_list, my_list)))
Python3.6.8
In [1]: a = 'which option is the fastest'
In [2]: %%timeit
...: ''.join(a).upper()
762 ns ± 11.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [3]: %%timeit
...: map(lambda x:x.upper(), a)
209 ns ± 5.73 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [4]: %%timeit
...: map(str.upper, [i for i in a])
1.18 µs ± 11.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [5]: %%timeit
...: [i.upper() for i in a]
3.2 µs ± 64.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Si vous avez besoin d'une chaîne ou d'une liste comme sortie et non d'un itérateur (c'est pour Python3), comparez l' ''.join(string).upper()
option à ceci:
In [10]: %%timeit
...: [i for i in map(lambda x:x.upper(), a)]
4.32 µs ± 112 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Si vous essayez de convertir toutes les chaînes en minuscules dans la liste, vous pouvez utiliser des pandas:
import pandas as pd
data = ['Study', 'Insights']
pd_d = list(pd.Series(data).str.lower())
production:
['study', 'insights']