Tupel entpacken

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
Dosi
User
Beiträge: 9
Registriert: Donnerstag 7. April 2016, 17:24

Hi, ich beleg grad ein Programmierpraktikum an der Uni und muss zwei Aufgaben lösen in Python:

Das Tupel a enthält 20 mal eine 1, das hab ich folgendermaßen erstellt:

Code: Alles auswählen

a = (1,) * 20
Soweit so gut. Als nächstes wird gefordert, dieses Tupel in eine Liste umzuwandeln, als Hinweis steht dabei "Tupel entpacken". Ich weiß zwar grundsätzlich wie man ein Tupel entpäckt, aber ich bin mir nicht sicher wie ich das hier anwenden soll, um das Tupel mit 20 mal einer 1 in eine Liste mit 20 mal einer 1 zu verwandeln (als Übergangsmethode hab ich einfach a = list(a) genommen, um das Tupel in eine Liste zu konvertieren).

Die zweite Sache ist ähnlicher Natur: Ich soll aus dem String "words" die Liste ["w", "o", "r", "d", "s"] erstellen - als Hinweis steht "wie beim Tupel". Und da komm ich nicht mehr weiter, hab keine Ahnung wie ich das anstellen soll :shock:

Hoffe ihr könnt mir helfen! Danke im Voraus :mrgreen:

lg Dosi
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Dosi hat geschrieben:[…] dieses Tupel in eine Liste umzuwandeln, […] zu verwandeln ([…] zu konvertieren).
Worin genau soll denn der Unterschied liegen? Deine Lösung ``list(a)`` ist doch gut. Es gibt natürlich Alternativen, die aber nicht besser wären:

Code: Alles auswählen

>>> [element for element in (1,) * 20]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> a = list()
>>> for element in (1,) * 20:
...     a.append(element)
... 
>>> a
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
Zu 2.:
strings sind genau wie tuples oder lists auch Sequenzen, die eine bestimmte Anzahl an Elementen haben. Im Falle von strings bestehen die Elemente eben aus einzelnen Zeichen. Dein 'words' hat also 5 Elemente:

Code: Alles auswählen

>>> len('words')
5
>>> 'words'[0]
'w'
>>> 'words'[4]
's'
>>> [char for char in 'words']
['w', 'o', 'r', 'd', 's']
>>> tuple('words')
('w', 'o', 'r', 'd', 's')
>>> list('words')
['w', 'o', 'r', 'd', 's']
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Sirius3
User
Beiträge: 17745
Registriert: Sonntag 21. Oktober 2012, 17:20

"entpacken" meint normalerweise, dass ein iterierbares Objekt auf einzelne Variablen aufgeteilt wird:

Code: Alles auswählen

>>> a, b = 1, 2
>>> a
1
>>> b
2
Nun kann man einen Teil nicht in einzelne Variablen sondern in eine Liste „entpacken“:

Code: Alles auswählen

>>> a, *b = 1, 2, 3, 4
>>> a
1
>>> b
[2, 3, 4]
ACHTUNG, das folgende ist Woodoo und kein schönes Python!

... und dann kann man natürlich auch alles in eine Liste „entpacken“:

Code: Alles auswählen

>>> *a, = (1,) * 20
>>> a
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
Dosi
User
Beiträge: 9
Registriert: Donnerstag 7. April 2016, 17:24

@mutetella:
Ich wusste schon, dass list() eigentlich der beste Befehl ist (kenne ihn von anderen Programmiersprachen), wollte aber nachfragen, weil eben als Hinweis "Tupel entpacken" gestanden ist - hab mir gedacht es gibt da irgendwie eine ähnlich einfache Lösung.

@Sirius3:
Genau sowas hab ich vermutet, aber ich habs immer mit

Code: Alles auswählen

a* = (1,) * 20
versucht und hab dann natürlich einen Fehler produziert :?

Danke euch beiden!
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Dosi
Diese ganze unpacking-Geschichten funktionieren in dieser Form erst mit Python 3, interessant dürfte für Dich auch dieser Thread auf stackoverflow sein…
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten