Vergleiche zwei Listen miteinander

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
Joey20
User
Beiträge: 9
Registriert: Dienstag 22. Januar 2019, 23:38

Hi Leute,

ich bin eigentlich kein Programmierer , sondern Mathematiker, daher nimmt es mir bitte nicht übel.
Habe jetzt in MachineLearning Feature Selection einige Klassen geschrieben ,die die Features anhand unterschiedlichen Kriterien selektieren.

Nun ist meine Idee , die Ergebnisse der jeweiligen Algorithmen in einer Liste zu speichern ,um dann die jeweiligen Listen miteinander zu vergleichen so , dass am ende bspw 10 Features in einer Liste vorhanden sind, die von allen Algorithmen ausgesucht worden sind.

if functools.reduce(lambda i, j : i and j, map(lambda m, k: m == k, X_anova, X_rfe), True):
print("id")
else:
print("no")
oder
x=0
for x in len(range(X_rfe_liste)):
if X_anova[x] == X_rfe[x]:
print("A")
else:
print("b")
leider vergleicht er nur die ganze Liste miteinander :/ . Würde halt eher wollen dass die jeweiligen Elemente in der Liste miteinander verglichen werde und dann die n=10 gleichen , gespeichert werden in einer neuen Liste .


Wäre für Ideen sehr dankbar :)

Danke Freunde
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Kannst du nicht einfach jeweils ein Set aus den Listen machen und dann mit intersection arbeiten?

Code: Alles auswählen

>>> {1, 2, 4, 8, 16}.intersection({2, 4, 6, 8, 10})
{8, 2, 4}
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Zuerst das: Die Namen X_rfe_liste, X_anova und X_rfe widersprechen nicht nur dem Python Style Guide (https://www.python.org/dev/peps/pep-0008/), sondern sind völlig unverständlich. Du brauchst keine Abkürzungen verwenden, die Byte-Preise sind in den letzten Jahren deutlich gesunken. Und der Typ eines Objekts hat in einem Namen erst recht nichts verloren, denn wenn du irgendwann entscheiden solltest, dass ein anderer Typ besser geeignet wäre, würde dein Code dich anlügen und du müsstest jedes Vorkommnis des Namens anpassen. Mach dir dein Leben einfach und verzichte darauf, dir zukünftige Arbeit aufzuhalsen.

Zum Problem: Du solltest mit Mengenoperationen arbeiten, statt Elemente einzeln zu vergleichen.
Guckstu hier: https://docs.python.org/3/library/stdty ... -frozenset

Zum Beispiel:

Code: Alles auswählen

from itertools import islice

def take(n, iterable):  # see https://docs.python.org/3/library/itertools.html#itertools-recipes
    "Return first n items of the iterable as a list"
    return list(islice(iterable, n))

bla_results = set(...)
blubb_results = set(...)
common_results = take(10, bla_results & blubb_results)
In specifications, Murphy's Law supersedes Ohm's.
Joey20
User
Beiträge: 9
Registriert: Dienstag 22. Januar 2019, 23:38

Hey Leute , sorry für das verspätete Danke . Habs vorhin danke eurer Hilfe geschafft :) .
Schönes Wochenende noch
Antworten