Seite 1 von 1
geschachtelte Listen auflösen
Verfasst: Dienstag 26. Februar 2008, 10:02
von htw7448
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
Verfasst: Dienstag 26. Februar 2008, 10:12
von BlackJack
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:
Verfasst: Dienstag 26. Februar 2008, 13:53
von htw7448
ok nachdem ich um den Brei rumprogrammiert habe ... wie peinlich. Danke Blackjack
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.
Verfasst: Dienstag 26. Februar 2008, 14:05
von BlackJack
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.
Verfasst: Dienstag 26. Februar 2008, 14:06
von Leonidas
Ich denke du suchst eher LCs statt Konstrukte aus filter() und map().
Verfasst: Dienstag 26. Februar 2008, 14:16
von htw7448
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.
Verfasst: Dienstag 26. Februar 2008, 14:49
von BlackJack
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.