Wert verändert sich nach append

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dennbas
User
Beiträge: 25
Registriert: Mittwoch 28. September 2016, 10:20

Hallo zusammen,

sobald ich einen Wert in einer Liste hinzufüge, verändert sich der und ich verstehe nicht wieso ?

Code: Alles auswählen

        value = (shXLSBearbeitungsstatus_KON.cell_value(rowx=k, colx=0))
        valuei = int(shXLSBearbeitungsstatus_KON.cell_value(rowx=k, colx=0))

        KontaktListe.append(valuei)
Nach dem ersten Durchlauf sehen die Variablen so aus:

value = 2.02150300000e+12
valuei = 2021503000005
KontaktListe = [2021503000005L]

Woher kommt nun in der Liste das große L am Ende ?

Im Voraus vielen Dank für alle Antworten.

LG Dennbas
BlackJack

@dennbas: Der Wert verändert sich nicht, nur die Darstellung. Die Elemente in einer Liste werden in ihrer `repr()`-Darstellung gezeigt, Du erwartest aber die `str()`-Darstellung:

Code: Alles auswählen

In [2]: str(2021503000005)
Out[2]: '2021503000005'

In [3]: repr(2021503000005)
Out[3]: '2021503000005L'

In [4]: type(2021503000005)
Out[4]: long
Werte vom Typ `long` haben am Ende ihrer `repr()`-Darstellung ein 'L' stehen.
dennbas
User
Beiträge: 25
Registriert: Mittwoch 28. September 2016, 10:20

Vielen Dank für deine Antwort, wenn ich nun aber nach 2021503000005 in der Liste suche, erhalte ich keinen Treffer , wie kann das dann sein ?

ein

Code: Alles auswählen

print KontaktListe[0]
bestätigt aber deine Aussage
dennbas
User
Beiträge: 25
Registriert: Mittwoch 28. September 2016, 10:20

ein

Code: Alles auswählen

str(int(shXLSBearbeitungsstatus_KON.cell_value(rowx=k, colx=0))))
konnte das Problem lösen, ganz verstanden habe ich es aber noch nicht dass er vorher nicht richtig gematcht hat
BlackJack

@dennbas: Wenn die Umwandlung in eine Zeichenkette das Problem lösen konnte dann suchst Du nach einer Zeichenkette und nicht nach einer Zahl, also nach '2021503000005' und nicht nach 2021503000005. Falls die Liste von der Programmlogik her Zahlen enthalten soll, dann wandelst Du den falschen Wert um. Dann sollte man eher die Zeichenkette nach der gesucht wird in eine Zahl wandeln.

Deine Namensgebung ist übrigens suboptimal. Die Namen enthalten kryptische Kürzel und anscheinend sowohl Prä- als auch Suffixe die den konkreten Typ des Wertes angeben. Das macht man nicht. Bei dem `sh`-Präfix kann man ein `_sheet` oder `_arbeitsblatt` (um nicht Deutsch und Englisch zu mischen) an den Namen anhängen, weil das nicht nur der konkrete Typ ist, sondern auch der ”Logische”, aber so etwas wie `i` für `int` oder `Liste` sollte man nicht machen. Bei Sequenztypen verwendet man üblicherweise die Mehrzahl. Also `Kontakte` statt `KontaktListe`. Wobei Namen für so ziemlich alles ausser Klassen und Konstanten konventionell auch klein_mit_unterstrichen geschrieben werden.
Antworten