Betrachten Sie zum Beispiel die Liste in Python, die sowohl Buchstaben- als auch Zahlenfolgen enthält

a = ['Total', '1', '4', '5', '2']

Wie wäre es möglich, dies in die gemischte Werteliste umzuwandeln?

b = ['Total', 1.0, 4.0, 5.0, 2.0]

Beachten Sie, dass wir im Allgemeinen möglicherweise nicht wissen, wo sich die Buchstabenfolge in der Liste befindet, d. H. Möglicherweise

a = ['Total', '1', '4', 'Next', '2']
2
rwolst 28 Mai 2013 im 02:33

3 Antworten

Beste Antwort

Sie können eine Generatorfunktion und eine Ausnahmebehandlung verwenden:

>>> def func(seq):
        for x in seq:
            try:
                yield float(x)
            except ValueError:
                yield x
...             
>>> a = ['Total', '1', '4', '5', '2']
>>> list(func(a))
['Total', 1.0, 4.0, 5.0, 2.0]
5
Ashwini Chaudhary 27 Mai 2013 im 22:38

Angenommen, Ihr Endziel ist kein CSV-Paket, würde ich pandas.read_csv empfehlen.

0
U2EF1 27 Mai 2013 im 22:59

Konvertieren Sie einfach alles außer der ersten Spalte:

b = a[:1] + [float(i) for i in a[1:]]

Nach Ihrer anderen Frage zu urteilen, verarbeiten Sie eine CSV-Datei Die erste Spalte ist immer eine Zeichenfolge. Es macht keinen Sinn, diesen Teil jeder Zeile zu konvertieren:

>>> a = ['Total', '1', '4', '5', '2']
>>> a[:1] + [float(i) for i in a[1:]]
['Total', 1.0, 4.0, 5.0, 2.0]

Sie könnten auch einen try: - except ValueError -Ansatz verwenden, aber warum entsteht der Overhead, wenn im Voraus bekannt ist, welche Spalte Text enthält und welche Spalten numerische Werte haben?

4
Community 23 Mai 2017 im 12:07