Seite 1 von 1

list indices must be integers, not float

Verfasst: Donnerstag 10. Juni 2010, 20:50
von Horst
Hallo,
Ich hab da mal ne Frage. Vielleicht kann mir ja jemand helfen.
Ich mochste folgende Operation ausführen:

Code: Alles auswählen

A = []
for i in B:
    if i == 0:
        A.append(0)
    else:
        x = (B[i]-C[i])
        A.append(x)
mit B = [0, 151189146.454, 302574642.449, 453763788.903, 605149284.898, 756338431.352, 907723927.347, 1063232763.699, 1214618259.694, 1365807406.148, 1517192902.1429999, 1668382048.5969999, 1819767544.592, 1966637001.1470001, 2126465527.3989999, 2277851023.3930001]

und C = [0, 50.0, 100.0, 150.0, 200.0, 250.0, 300.0, 350.0, 400.0, 450.0, 500.0, 550.0, 600.0, 650.0, 700.0, 750.0]

Ich bekomme folgende Fehlermeldung, aus der Ich leider nicht schlau werde:

Traceback (most recent call last):
File "C:\Users\Desktop\Test.py", line 6, in <module>
x = (B-C)
TypeError: list indices must be integers, not float

Danke schonmal für eure Hilfe.

Re: list indices must be integers, not float

Verfasst: Donnerstag 10. Juni 2010, 20:57
von cofi
Es gibt code-tags.

Dein Problem ist, dass du ueber die Listenelemente iterierst und die sind nunmal Floats.

Re: list indices must be integers, not float

Verfasst: Donnerstag 10. Juni 2010, 20:59
von heiliga horsd
Ich würde das Problem mit

Code: Alles auswählen

for i in range(len(B)):
    if B[i] == 0:
        [...]
umschiffen.

Re: list indices must be integers, not float

Verfasst: Donnerstag 10. Juni 2010, 21:00
von fabi1511
erstmal gibt es in diesem forum diese praktischen code tags (wichtig wegen den einrückungen...)
aber jetzt zu deinem Problem: lies dir doch einfach mal die fehlermeldung durch, da steht ja, dass du integers (ganze zahlen) und keine floats (Fließkommazahlen) verwenden musst... lass das '.0' einfach weg...
ACHTUNG: 50.0 ist auch vom typ float...

allerdings wird es auch dann einen fehler haben, weil deine liste einfach viel weniger als 50 einträge hat... also durchdenk dein programm nochmal

Re: list indices must be integers, not float

Verfasst: Donnerstag 10. Juni 2010, 21:02
von Horst
Danke. So hats geklappt.

Re: list indices must be integers, not float

Verfasst: Donnerstag 10. Juni 2010, 21:15
von cofi
Und jetzt noch in pythonisch:

Code: Alles auswählen

for i, elem in enumerate(B):
    if elem == 0:
        [...]

Re: list indices must be integers, not float

Verfasst: Freitag 11. Juni 2010, 11:17
von hendrikS
noch pythonischer wäre eigentlich:

Code: Alles auswählen

A = []
for b,c in zip(B,C):
    if b:
        A.append(b-c)
    else:
        A.append(0)
Ist auch effizienter, da das reinindizieren wegfällt.

Re: list indices must be integers, not float

Verfasst: Freitag 11. Juni 2010, 11:41
von gkuhl
noch pythonischer wäre eine List Comprehension:

Code: Alles auswählen

A = [b-c if b else 0 for b,c in zip(B,C)]

Re: list indices must be integers, not float

Verfasst: Freitag 11. Juni 2010, 12:23
von BlackJack
Falls die Python-Version <3 und `B` und `C` gross sind, sollte man vielleicht noch `itertools.izip()` erwähnen.