Ich habe eine Python-Listenvariable, die Zeichenfolgen enthält. Gibt es eine Python-Funktion, die alle Zeichenfolgen in einem Durchgang in Kleinbuchstaben und umgekehrt in Großbuchstaben konvertieren kann?
Ich habe eine Python-Listenvariable, die Zeichenfolgen enthält. Gibt es eine Python-Funktion, die alle Zeichenfolgen in einem Durchgang in Kleinbuchstaben und umgekehrt in Großbuchstaben konvertieren kann?
Antworten:
Dies kann mit Listenverständnissen erfolgen. Diese haben grundsätzlich die Form von [function-of-item for item in some-list]
. Um beispielsweise eine neue Liste zu erstellen, in der alle Elemente in Kleinbuchstaben (oder Großbuchstaben im zweiten Snippet) angeordnet sind, verwenden Sie Folgendes:
>>> [x.lower() for x in ["A","B","C"]]
['a', 'b', 'c']
>>> [x.upper() for x in ["a","b","c"]]
['A', 'B', 'C']
Sie können auch die map
Funktion verwenden:
>>> 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"])
Listenverständnisse sind nicht nur leichter zu lesen (für viele Menschen), sondern gewinnen auch das Speed Race:
$ 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
gewinnt das Rennen, tut aber nichts :)
map(str.lower,["A","B","C"])
ist am schnellsten ist python3.7.5
>>> map(str.lower,["A","B","C"])
['a', 'b', 'c']
str.upper
in Großbuchstaben umzuwandeln
Listenverständnis ist, wie ich es machen würde, es ist der "pythonische" Weg. Das folgende Transkript zeigt, wie eine Liste in Großbuchstaben und dann wieder in Kleinbuchstaben konvertiert wird:
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
als Variablenname zu verwenden ist nicht die beste Wahl :)
list
Zeug :)). Woher kommt deiner Meinung nach die UV-Strahlung, die du kürzlich bekommen hast? :)
Für dieses Beispiel ist das Verständnis am schnellsten
$ python -m timeit -s 's = ["eins", "zwei", "drei"] * 1000' '[x.upper für x in s]' 1000 Schleifen, am besten 3: 809 usec pro Schleife $ python -m timeit -s 's = ["eins", "zwei", "drei"] * 1000' 'map (str.upper, s)' 1000 Schleifen, am besten 3: 1,12 ms pro Schleife $ python -m timeit -s 's = ["eins", "zwei", "drei"] * 1000' 'map (lambda x: x.upper (), s)' 1000 Schleifen, am besten 3: 1,77 ms pro Schleife
Lösung:
>>> 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']
Diese Lösung erstellt eine separate Liste mit Kleinbuchstaben, unabhängig von ihrer ursprünglichen Groß- und Kleinschreibung. Wenn der ursprüngliche Großbuchstabe list s
groß ist, enthält der Kleinbuchstabe des jeweiligen Elements in list p
. Wenn die ursprüngliche Groß- und Kleinschreibung des Listenelements bereits in Kleinbuchstaben geschrieben list p
ist, list s
wird die Groß- und Kleinschreibung des Elements beibehalten und in Kleinbuchstaben gespeichert. Jetzt können Sie list s
anstelle von verwenden list p
.
Wenn Sie mit einem anderen String übereinstimmen möchten, indem Sie ihn in einem Durchgang konvertieren, können Sie ihn auch verwenden str.casefold()
.
Dies ist nützlich, wenn Sie Nicht-ASCII-Zeichen haben und mit ASCII-Versionen übereinstimmen (z. B. maße vs masse). Obwohl str.lower
oder str.upper
in solchen Fällen fehlschlägt, str.casefold()
wird bestanden. Dies ist in Python 3 verfügbar und die Idee wird ausführlich mit der Antwort https://stackoverflow.com/a/31599276/4848659 erläutert .
>>>str="Hello World";
>>>print(str.lower());
hello world
>>>print(str.upper());
HELLO WOLRD
>>>print(str.casefold());
hello world
Sie könnten versuchen, Folgendes zu verwenden:
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)
Wenn Sie eine Zeichenfolge oder Liste als Ausgabe und keinen Iterator benötigen (dies ist für Python3), vergleichen Sie die ''.join(string).upper()
Option mit dieser:
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)
Wenn Sie versuchen, alle Zeichenfolgen in Kleinbuchstaben in der Liste zu konvertieren, können Sie Pandas verwenden:
import pandas as pd
data = ['Study', 'Insights']
pd_d = list(pd.Series(data).str.lower())
Ausgabe:
['study', 'insights']