Seite 1 von 1

Tupel entfernen?

Verfasst: Montag 27. Dezember 2010, 17:27
von heiliga horsd
Moin,

das Problem sieht zwar ein wenig lächerlich aus, aber mir fällt nix kurzes, knackiges ein um folgendes Problem zu lösen :oops:

Aus

Code: Alles auswählen

([a,1,2,b,"Text"])
Soll nur

Code: Alles auswählen

[a,1,2,b,"Text"]
werden.

Gibts da irgendeine tolle Funktion in der Standardbibliothek um das Tupel los zu werden oder muss ich da "eine Schleife in der Schleife" (oder wie auch immer man das nennt) verwenden?

Lg HH

Re: Tupel entfernen?

Verfasst: Montag 27. Dezember 2010, 17:46
von cofi
Es gibt keine 1-elementigen Tuple, also gibt es den Problemfall gar nicht. Koenntest du etwas konkreter werden?

Hast du ein Tupel von Listen und herausfallen soll eine Liste?

Re: Tupel entfernen?

Verfasst: Montag 27. Dezember 2010, 17:55
von BlackJack
@cofi: Natürlich gibt es einelementige Tupel. Warum sollte es die nicht geben?

@heiliga horsd: Wo ist das Problem auf das einzige Element in einem Tupel zuzugreifen? Das braucht man doch keine Funktion für!?

Re: Tupel entfernen?

Verfasst: Montag 27. Dezember 2010, 18:08
von HerrHagen
was spricht gegen so was?

Code: Alles auswählen

>>> x = ([a,1,2,b,"Text"],)
>>> for i in x[0]:
...     print i

Re: Tupel entfernen?

Verfasst: Montag 27. Dezember 2010, 18:09
von heiliga horsd
OK, um konkreter zu werden:

Es gibt zwei Listen, hier mal a und b genannt. In den Listen gibt es nur Integerwerte. Nun habe ich eine Funktion, die mit der Gesamtsumme der Werte der Liste und Länge etc. Berechnungen anstellt.

Die Funktion sieht in etwa so aus:

Code: Alles auswählen

def foo(a, *b):
    ...
Wenn ich jetzt a und b übergebe, habe ich für b ein Tupel mit einer Liste drin und damit kann ich anscheinend nicht rechnen :(


Lg HH

Re: Tupel entfernen?

Verfasst: Montag 27. Dezember 2010, 18:14
von BlackJack
@heiliga horsd: Warum sieht dann die Signatur von der Funktion so aus und nicht einfach ``def foo(a, b)``? Ansonsten willst Du die Liste halt aus dem Tupel heraus holen. Wenn *das* Probleme bereitet, wäre es Zeit das Tutorial noch einmal durch zu arbeiten.

Re: Tupel entfernen?

Verfasst: Montag 27. Dezember 2010, 18:18
von heiliga horsd
Das sieht so aus, weil b ja nicht immer übergeben wird, es gibt auch aufrufe ohne b (also foo(a)). Das extrahieren der Liste ist auch nicht unbedingt das Problem, aber ich wollte wissen ob es dafür eine schöne, kurze Funktion gibt oder ob ich da eine Schleife wie die von Herr Hagen brauche.

Re: Tupel entfernen?

Verfasst: Montag 27. Dezember 2010, 18:27
von BlackJack
@heiliga horsd: Das ist keine vernünftige Begründung für die Signatur. Da steht das beliebig viele weitere Argumente übergeben werden können. Das nur für *ein* optionales Argument zu missbrauchen ist IMHO sehr unschön. Und eine Schleife brauchst Du da auch nicht. Wo hat Herr Hagen da eine Schleife benutzt um die Liste aus dem Tupel zu holen!? Schau Dir den Code noch mal an was da tatsächlich gemacht wird.

Kannst Du nicht für `b` ein Default-Argument verwenden und da ein leeres Tupel oder `None` als Default-Wert angeben?

Re: Tupel entfernen?

Verfasst: Montag 27. Dezember 2010, 18:37
von heiliga horsd
Daran habe ich noch gar nicht gedacht, das mit None als Standardwert probiere ich gleich aus!
>>> for i in x[0]:
... print i
Das ist doch eine Schleife?? Auf die Idee mit x[0] direkt darauf zuzugreifen bin ich allerdings selbst auch nicht gekommen :oops:

Jedenfalls funktioniert es jetzt, Danke an alle!