Ich habe eine Python-Listenvariable, die Zeichenketten enthält. Gibt es eine Funktion, die alle Zeichenketten in einem Durchgang in Kleinbuchstaben und umgekehrt in Großbuchstaben umwandeln kann?
Antworten
Zu viele Anzeigen?Dies kann geschehen mit Listenauffassungen
>>> [x.lower() for x in ["A", "B", "C"]]
['a', 'b', 'c']
>>> [x.upper() for x in ["a", "b", "c"]]
['A', 'B', 'C']
oder mit dem map
Funktion
>>> list(map(lambda x: x.lower(), ["A", "B", "C"]))
['a', 'b', 'c']
>>> list(map(lambda x: x.upper(), ["a", "b", "c"]))
['A', 'B', 'C']
Ned Deily
Punkte
81039
Abgesehen davon, dass sie (für viele Menschen) leichter zu lesen sind, gewinnen Listen auch das Geschwindigkeitsrennen:
$ 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
ghostdog74
Punkte
305138
paxdiablo
Punkte
809679
Ich würde es so machen, dass die Liste verstanden wird, das ist der "pythonische" Weg. Das folgende Transkript zeigt, wie man eine Liste in Großbuchstaben und dann wieder in Kleinbuchstaben umwandelt:
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']
John La Rooy
Punkte
278961
Bei diesem Beispiel ist die Verständigung am schnellsten
$ python -m timeit -s 's=\["one","two","three"\]\*1000' '\[x.upper for x in s\]'
1000 loops, best of 3: 809 usec per loop
$ python -m timeit -s 's=\["one","two","three"\]\*1000' 'map(str.upper,s)'
1000 loops, best of 3: 1.12 msec per loop
$ python -m timeit -s 's=\["one","two","three"\]\*1000' 'map(lambda x:x.upper(),s)'
1000 loops, best of 3: 1.77 msec per loop
- See previous answers
- Weitere Antworten anzeigen