Seite 1 von 1
Inhalte von Listen vergleichen ?
Verfasst: Samstag 5. Januar 2008, 22:38
von kaytec
Hallo !
ich möchte den Inhalt einer Liste mit dem Inhalt einer anderen Liste vergleichen.
Code: Alles auswählen
liste1 = [[1, 2], [3, 4], [5, 6]]
liste2 = [2, 1]
if liste[0] in (lambda x: x for x in liste1):
print 'Ja'
Ich könnte auch über die liste1 iterieren, doch geht das nicht irgendwie so auch einfacher ?
gruß frank
Verfasst: Samstag 5. Januar 2008, 22:51
von BlackJack
Du wirst wohl nochmal genauer beschreiben müssen was Du machen möchtest. Weder aus der Beschreibung noch aus dem Quelltext werde ich schlau.
Zum Quelltext: `liste` wird nicht definiert und ein ``in`` auf eine Funktion angewendet ergibt einen `TypeError`.
Verfasst: Samstag 5. Januar 2008, 22:55
von Python 47
Ich weiß nicht ob du das meinst:
Code: Alles auswählen
liste1 = [[1, 2], [3, 4], [5, 6]]
liste2 = [2, 1]
liste2 in liste1
False
liste1 = [[1, 2], [3, 4], [5, 6]]
liste2 = [1, 2]
liste2 in liste1
True
Verfasst: Samstag 5. Januar 2008, 22:55
von kaytec
Hallo BlackJack !
Ob ein Element der Liste2 in den Einzellisten der Liste1 ist.
gruß frank
Verfasst: Samstag 5. Januar 2008, 23:01
von BlackJack
Nur das erste Element von `liste2`? Alle? Irgend eins?
Verfasst: Samstag 5. Januar 2008, 23:02
von kaytec
Mal eine Version mit einer Schleife über die Liste1.
Code: Alles auswählen
liste1 = [[1, 2], [3, 4], [5, 6]]
liste2 = [1, 2]
for element in liste1:
if liste2[0] in element:
print 'Ja'
gruß frank
Verfasst: Sonntag 6. Januar 2008, 11:36
von kaytec
Habe mir noch einige Gedanken gemacht und habe es mal die Funktion mit lambda ausgelagert.
Das funktioniert natürlich, da ich Äpfel mit Äpfel vergleiche !
Code: Alles auswählen
if liste2[0] in liste1:
print 'ja'
else:
print 'Nein'
Nein
So würde ich gerne vergleichen, doch jetzt habe ich Äpfel und Birnen !
Code: Alles auswählen
def vergleiche(liste1):
for element in liste1:
return element
if liste2[0] in vergleiche(liste1):
print 'ja'
else:
print 'Nein'
ja
Diese funktion hätte ich gerne mit lambda gemacht - bekomme ich aber nicht so hin ?!
gruß frank
Verfasst: Sonntag 6. Januar 2008, 11:57
von BlackJack
Immer wenn ich denke ich hab's verstanden verwirrst Du mich wieder mit Quelltext.
Dein letztes Beispiel mit `vergleiche()` ist eine sehr umständliche Art ``if liste2[0] in liste1[0]:`` zu sagen. Ist dir das klar!?
Ich weiss auch nicht warum Du ein ``lambda`` haben willst!?
Die verschachtelten Schleifen aus dem vorletzten Beitrag könnte man auch so ausdrücken:
Code: Alles auswählen
if any(liste2[0] in sublist for sublist in liste1):
print 'ja'
else:
print 'nein'
Verfasst: Sonntag 6. Januar 2008, 12:11
von Nicht_zu_definieren
Ich
vermute, dass dich das hier relativ nahe an das heranbringt was du suchst. Es bleibt jedoch bei einer Vermutung weil aus dem was du schreibst nicht ganz klar wird was du eigentlich willst :?
Code: Alles auswählen
>>>liste1 = [[1,2,3], [3,4], range(5)]
>>>liste2 = [3,1,2]
>>>spam = lambda list1, set2: True in [True for elem in list1 if set(elem)==set2]
>>>spam(list1, set(liste2))
True
>>>liste1 = [[1,1,1,1,1,2,2,2,2,2,2,1,1,1]]
>>>liste2 = [2,1]
>>>spam(liste1, set(liste2))
True
Edit: Ja, mit any() geht es auch.
Code: Alles auswählen
spam = lambda list1, set2: any([True for elem in list1 if set(elem)==set2])
Verfasst: Sonntag 6. Januar 2008, 12:15
von kaytec
Danke BlackJack !
Ich wollte dich nicht verwirren - Ich denke nicht wie ein Informatiker - da gibt es glaub ich ein gutes Tut. in Netz.
Das was du mit 'any' machst, habe ich ja mit der funktion 'vergleiche(liste1):' ja auch gemacht - oder ?
Ich hatte gedacht solch einen Vergleich ohne Funktion macht man mit einen lambda-Funktion. So geht es auch.
gruß und dank frank
Verfasst: Sonntag 6. Januar 2008, 12:18
von kaytec
Hallo Nicht_zu_definieren !
Was ich machen möchte ist mir schon klar. Wie ich es aber formuliere war mir nicht so ganz klar.
gruß und dank frank
Verfasst: Sonntag 6. Januar 2008, 12:40
von Trundle
kaytec hat geschrieben:Das was du mit 'any' machst, habe ich ja mit der funktion 'vergleiche(liste1):' ja auch gemacht - oder ?
Nein, deine Funktion `vergleiche' ist, wie BlackJack bereits sagte, einfach nur eine umständliche Art ``liste1[0]'' zu sagen, weil deine Funktion einfach nur immer das erste Element der übergebenen Liste zurückgibt. Mit dem ``return element'' wird die Funktion verlassen. Für immer. Und selbst wenn sie so funktionieren würde, wie du vermutlich gedacht hast, wäre das ja nicht anderes als eine Iteration über eine Liste.
Deine `vergleiche' müsste so irgendwie aussehen, damit sie funktioniert:
Code: Alles auswählen
def vergleiche(liste1):
for element in liste1:
for subelement in element:
yield subelement
Verfasst: Sonntag 6. Januar 2008, 12:41
von BlackJack
Wie schon gesagt: Dein ``vergleiche(liste1)`` ist vom Effekt das gleiche wie ``liste1[0]``. Die Funktion gibt einfach nur das erste Element der Liste zurück.
Edit: Mist, zu langsam.
Dann ist der Name `vergleiche` natürlich sehr irreführend, weil da ja nichts verglichen wird.
Verfasst: Sonntag 6. Januar 2008, 13:21
von kaytec
Danke an Alle !
ich hatte gedacht bei meiner 'vergleiche' Funktion, die ja nicht wirklich vergleicht, würde die return Anweisung alle Unterlisten zurückgeben.
Mit 'any' geht es ja super !
gruß frank