Tupel entfernen?

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
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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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?
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!?
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

was spricht gegen so was?

Code: Alles auswählen

>>> x = ([a,1,2,b,"Text"],)
>>> for i in x[0]:
...     print i
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
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.
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.
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?
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!
Antworten