List und Integer problem

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
mit
User
Beiträge: 285
Registriert: Dienstag 16. September 2008, 10:00

Hallo,
warum kann ich keine Integer Werte mit += in eine Liste einfuegen?

Code: Alles auswählen

>>> a = []
>>> a += 97
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> a.append(97)
>>> a
[97]

>>> a += 'a'
>>> a
[97, 'a']
Vielen Dank im Voraus.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hallo mit.

Das du mit += einen String anhängen kannst ist ehr "Glück".
Ich mutmaße mal, dass du dieses Verhalten nicht erwarten würdest.

Code: Alles auswählen

In [1]: a = [10]

In [2]: a += "Hallo"

In [3]: a
Out[3]: [10, 'H', 'a', 'l', 'l', 'o']
Über einen String wird iteriert und jedes einzelne Element wird der Liste hinzugefügt.

Wenn du zwingend die += Syntax benutzen möchtest dann musst du deine zu ergänzenden Objekte selber in einer Liste oder Tuple verpacken.

Code: Alles auswählen

In [4]: a = [10]

In [5]: a += [97]

In [6]: a
Out[6]: [10, 97]
BlackJack

@mit: ``+=`` auf Listen entspricht nicht der `append()`- sondern der `extend()`-Methode.

Code: Alles auswählen

In [55]: a = list()

In [56]: a.extend(42)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/home/bj/<ipython console> in <module>()

TypeError: 'int' object is not iterable

In [57]: a.extend('a')

In [58]: a
Out[58]: ['a']

In [59]: a.extend('spam')

In [60]: a
Out[60]: ['a', 's', 'p', 'a', 'm']
mit
User
Beiträge: 285
Registriert: Dienstag 16. September 2008, 10:00

Danke, aber welche Methode ist schneller?
BlackJack

@mit: Warum ist das wichtig? Du kannst durch messen herausfinden, welche bei der Python-Implementierung, die Du verwendest, schneller ist. Das Ergebnis würde ich aber nicht unbedingt verallgemeinern.

Ich finde `extend()` auf jeden Fall "lesbarer" weil man da einfacher in der Dokumentation nach suchen kann, und so vielleicht nicht den Fehler macht es mit `append()` zu verwechseln, wie das bei ``+=`` passieren kann.
Antworten