803 Stimmen

Alle Zeichenketten in einer Liste in int umwandeln

Wie konvertiere ich alle Zeichenketten in einer Liste in ganze Zahlen?

['1', '2', '3']    [1, 2, 3]

1489voto

cheeken Punkte 32687

Gegeben:

xs = ['1', '2', '3']

Utilice map puis list um eine Liste von Ganzzahlen zu erhalten:

list(map(int, xs))

In Python 2, list unnötig war, da map eine Liste zurück:

map(int, xs)

479voto

Chris Vig Punkte 8007

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]

11voto

Shubhank Gupta Punkte 308

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

map function iterator object and it's type

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]

8voto

Patrick Artner Punkte 47282

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

8voto

danialcodes Punkte 145

Mit der Schleifenabkürzung in Python können Sie String-Listenelemente leicht in int-Elemente umwandeln

Angenommen, Sie haben eine Zeichenkette result = ['1','2','3']

Tun Sie es einfach,

result = [int(item) for item in result]
print(result)

Sie erhalten dann eine Ausgabe wie

[1,2,3]

CodeJaeger.com

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.

Powered by:

X