geschachtelte Listen auflösen

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.
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

geschachtelte Listen auflösen

Beitragvon htw7448 » Dienstag 26. Februar 2008, 10:02

ich stehe wieder voll auf dem Schlauch. Für `dicts` gibt es die .item() Funktion um an die einzelnen Elemente zu kommen. Gibt es etwas vergleichbares für Listen?

Wie löse ich eine geschachtelte Liste in einzelne Strings auf? Folgender Code bringt das zwar, ist aber über Mehrfachschleifen viel zu umständlich.

Code: Alles auswählen

keylist = [['text1'], ['text2', 'text3'], ['text4']]
new = list()

for i in keylist:
   if len(i) >= 2:
      for a in i:
         new.append(a)
   else:
      new.extend(i)
keylist = new
BlackJack

Beitragvon BlackJack » Dienstag 26. Februar 2008, 10:12

Estwas vergleichbares für `dict.item()` für Listen um an die Elemente heran zu komme? Die Frage verstehe ich nicht. An die Elemente von Listen kommt man doch so schon direkt heran!?

Die verschachtelten Schleifen sind in der Tat viel zu umständlich:

Code: Alles auswählen

for sublist in keylist:
    new.extend(sublist)
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

Beitragvon htw7448 » Dienstag 26. Februar 2008, 13:53

ok nachdem ich um den Brei rumprogrammiert habe ... wie peinlich. Danke Blackjack :P

Ich habe noch ein kleines Verständnisproblem mit Lambda Fkt.

Frage : Kann man innerhalb von lambda über eine Liste iterieren? Also prüfe ob ein Element aus Liste 1 in Liste 2 ist und gib das Element zurück. auf einen Prüfwert (liste1[0]) gesehen so:

Code: Alles auswählen

unwanted_ipkt = gom.app.cmm_inspections.filter('n', lambda value: liste1[0] in value)


Liste 2 wird über `'n'` aus app.cmm_inspections erzeugt.
Zuletzt geändert von htw7448 am Dienstag 26. Februar 2008, 14:18, insgesamt 1-mal geändert.
BlackJack

Beitragvon BlackJack » Dienstag 26. Februar 2008, 14:05

Ich verstehe die Frage nicht so ganz. Was genau soll geprüft werden? Und was soll dann zurückgegeben werden? Jede Funktion muss irgend etwas zurück geben.

In dem Quelltext vermute ich mal, dass ein Wahrheitswert zurück gegeben werden muss, der entscheidet ob `value` ein gewünschter Wert ist, oder nicht.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 26. Februar 2008, 14:06

Ich denke du suchst eher LCs statt Konstrukte aus filter() und map().
My god, it's full of CARs! | Leonidasvoice vs Modvoice
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

Beitragvon htw7448 » Dienstag 26. Februar 2008, 14:16

Hm es ist nicht ganz einfach zu erklären. gom.app.ccm_inspections() ist eine Klasse mit folgenden Eigenschaften.

Code: Alles auswählen

class Item(__builtin__.object)
 |  Item object
 | 
 |  Methods defined here:
 | 
 |  __cmp__(...)
 |      x.__cmp__(y) <==> cmp(x,y)
 | 
 |  __delitem__(...)
 |      x.__delitem__(y) <==> del x[y]
 | 
 |  __getitem__(...)
 |      x.__getitem__(y) <==> x[y]
 | 
 |  __hash__(...)
 |      x.__hash__() <==> hash(x)
 | 
 |  __init__(...)
 |      x.__init__(...) initializes x; see x.__class__.__doc__ for signature
 | 
 |  __iter__(...)
 |      x.__iter__() <==> iter(x)
 | 
 |  __len__(...)
 |      x.__len__() <==> len(x)
 | 
 |  __repr__(...)
 |      x.__repr__() <==> repr(x)
 | 
 |  __setitem__(...)
 |      x.__setitem__(i, y) <==> x[i]=y
 | 
 |  __str__(...)
 |      x.__str__() <==> str(x)
 | 
 |  filter(...)
 |      Generate filtered container.
 | 
 |  get(...)
 |      Get token value.
 | 
 |  get_formatted(...)
 |      Get translated/formatted token value.
 | 
 |  get_item_reference(...)
 |      Get item reference expression.
 | 
 |  get_tokens(...)
 |      Get all available element tokens.
 | 
 |  get_translated(...)
 |      Get translated/formatted token value.
 | 
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 | 
 |  __new__ = <built-in method __new__ of type object>
 |      T.__new__(S, ...) -> a new object with type S, a subtype of T


Diese Funktion "verwaltet" Inspektionspunkte in einer Liste. Nun möchte ich über einen Filter die Elemente heraussuchen, die in einer 2. Liste (Prüfliste) vorkommen. In dem Tut. des Herstellers steht das man sowohl Lambda als auch LC für die Filterung einsetzen kann. Bis jetzt habe ich aber keine Iteration innerhalb von filter() hinbekommen. Zurückgegeben wird eine Liste die alle Elemente enthält, deren Namen teil eines Prüfstrings sind.
BlackJack

Beitragvon BlackJack » Dienstag 26. Februar 2008, 14:49

Was heisst keine Iteration hinbekommen? Eine normale ``for``-Schleife ist in ``lambda``-Ausdrücken nicht möglich. Es zwingt Dich ja aber auch niemand einen ``lambda``-Ausdruck zu nehmen. Schreib halt einfach eine Funktion.

Wer ist online?

Mitglieder in diesem Forum: Baidu [Spider], Bing [Bot]