Wie konvertiere ich alle Zeichenketten in einer Liste in ganze Zahlen?
['1', '2', '3'] [1, 2, 3]
Wie konvertiere ich alle Zeichenketten in einer Liste in ganze Zahlen?
['1', '2', '3'] [1, 2, 3]
Verwenden Sie eine Listenverstehen auf der Liste xs
:
[int(x) for x in xs]
z.B..
>>> xs = ["1", "2", "3"]
>>> [int(x) for x in xs]
[1, 2, 3]
Es gibt mehrere Methoden zur Umwandlung von Zeichenketten in einer Liste in ganze Zahlen.
In Python 2.x können Sie die Karte Funktion:
>>> results = ['1', '2', '3']
>>> results = map(int, results)
>>> results
[1, 2, 3]
Hier gibt sie die Liste der Elemente nach Anwendung der Funktion zurück.
In Python 3.x können Sie die gleiche Karte
>>> results = ['1', '2', '3']
>>> results = list(map(int, results))
>>> results
[1, 2, 3]
Im Gegensatz zu Python 2.x gibt die map-Funktion hier ein map-Objekt zurück, d.h. iterator
die das Ergebnis (die Werte) einen nach dem anderen liefern wird, was der Grund dafür ist, dass wir eine weitere Funktion namens list
die auf alle iterierbaren Elemente angewendet wird.
In der folgenden Abbildung ist der Rückgabewert der Funktion map
Funktion und deren Typ im Falle von Python 3.x
Die dritte Methode, die sowohl für Python 2.x als auch für Python 3.x üblich ist, d.h. Auflistung von Zusammenfassungen
>>> results = ['1', '2', '3']
>>> results = [int(i) for i in results]
>>> results
[1, 2, 3]
Wenn Ihre Liste reine Integer-Strings enthält, ist die akzeptierte Antwort der richtige Weg. Es wird abstürzen, wenn Sie ihm Dinge geben, die keine Ganzzahlen sind.
Wenn Sie also Daten haben, die Ints, möglicherweise auch Floats oder andere Dinge enthalten, können Sie Ihre eigene Funktion mit Fehlerbehandlung einsetzen:
def maybeMakeNumber(s):
"""Returns a string 's' into a integer if possible, a float if needed or
returns it as is."""
# handle None, "", 0
if not s:
return s
try:
f = float(s)
i = int(f)
return i if f == i else f
except ValueError:
return s
data = ["unkind", "data", "42", 98, "47.11", "of mixed", "types"]
converted = list(map(maybeMakeNumber, data))
print(converted)
Ausgabe:
['unkind', 'data', 42, 98, 47.11, 'of mixed', 'types']
Um auch iterables innerhalb von iterables zu behandeln, können Sie diesen Helfer verwenden:
from collections.abc import Iterable, Mapping
def convertEr(iterab):
"""Tries to convert an iterable to list of floats, ints or the original thing
from the iterable. Converts any iterable (tuple,set, ...) to itself in output.
Does not work for Mappings - you would need to check abc.Mapping and handle
things like {1:42, "1":84} when converting them - so they come out as is."""
if isinstance(iterab, str):
return maybeMakeNumber(iterab)
if isinstance(iterab, Mapping):
return iterab
if isinstance(iterab, Iterable):
return iterab.__class__(convertEr(p) for p in iterab)
data = ["unkind", {1: 3,"1":42}, "data", "42", 98, "47.11", "of mixed",
("0", "8", {"15", "things"}, "3.141"), "types"]
converted = convertEr(data)
print(converted)
Ausgabe:
['unkind', {1: 3, '1': 42}, 'data', 42, 98, 47.11, 'of mixed',
(0, 8, {'things', 15}, 3.141), 'types'] # sets are unordered, hence diffrent order
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.