Seite 1 von 1

Tupel entpacken

Verfasst: Donnerstag 7. April 2016, 17:30
von Dosi
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

Re: Tupel entpacken

Verfasst: Donnerstag 7. April 2016, 17:45
von mutetella
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']

Re: Tupel entpacken

Verfasst: Donnerstag 7. April 2016, 18:05
von Sirius3
"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]

Re: Tupel entpacken

Verfasst: Freitag 8. April 2016, 13:44
von Dosi
@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!

Re: Tupel entpacken

Verfasst: Freitag 8. April 2016, 15:32
von mutetella
@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…