komplette liste in liste vorhanden?

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
Benutzeravatar
draufunddran
User
Beiträge: 34
Registriert: Freitag 26. Juni 2009, 13:43

Hallo leute,

ich bräuchte mal wieder eure Hilfe, und zwar hab ich eine Liste von Punkten z.b. [2, 6 , 17, 34] und muss testen ob diese Elemente der Liste ALLE in einer anderen Liste vorhanden sind.

Zuerst hab ich da als schnelle Lösung an "liste-a in liste-b" gedacht aber der sucht ja dann bei der liste-b ob sie das Element liste-a enthält...

Gibt es da keine "schnelle" Lösung, oder geht das nur über schleifen?


greetz draufunddran
BlackJack

@draufunddran: ``set(punkte).issubset(viele_punkte)``
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Hi,

bei Mengen (sets) gibt es die Methode set.issubset. Vielleicht hilft dir das ja weiter, wen du nicht auf Listen als Datenstruktur angewiesen bist...
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

@Blackjack: Ich frage mich gerade, ob das Umwandeln in sets performancemäßig eine Rolle spielt. Kannst du da was zu sagen?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

.robert hat geschrieben:@Blackjack: Ich frage mich gerade, ob das Umwandeln in sets performancemäßig eine Rolle spielt. Kannst du da was zu sagen?
Genau sagen kann man nie etwas ohne es gemessen zu haben. Von meinen Erfahrungen her ist das Codeschnipsel von BlackJack allerdings effektiver als jede andere handgebastelte Lösung. Von welchen Datenmengen reden wir denn hier?
BlackJack

@.robert: Beide Listen werden einmal durchlaufen um die `set()`\s zu erstellen und dann wird das erste `set()` noch einmal durchlaufen um die Elemente zu prüfen. Was am effizientesten ist, dürfte von konkreten Daten abhängen. Wieviele Elemente jeweils in den Listen enthalten sind zum Beispiel. Man muss auch in Betracht ziehen, dass `set()`\s in CPython in C implementiert sind, also schneller sein können als eine theoretisch effizientere Variante die man in Python selbst schreibt.

Wie immer: Solange die Algorithmen sich nicht deutlich in der O-Notation unterscheiden, sollte man besser messen wo die Flaschenhälse sind, bevor man auf gut Glück irgendwo Zeit in "Optimierungen" steckt. :-)
Benutzeravatar
draufunddran
User
Beiträge: 34
Registriert: Freitag 26. Juni 2009, 13:43

Vielen Vielen Dank.... hat geholfen.

Zur größe kann ich nur sagen:

liste-a hat ein größe von 4 bis 8 Elementen und liste-b hat ca. 1Mio. Elemente...
Antworten