2017-05-24 4 views
0

Ich versuche zu finden, wo zwei Listen sich schneiden und die Indexposition dieser Kreuzung mit der längeren Liste zurückgeben.Indizes für den Schnittpunkt zweier Listen ungleicher Länge abrufen

Zur Zeit habe ich eine Methode, die funktioniert, aber es ist hässlich, in dem ich eine for-Schleife mit Bereich (0, len (a)) und eine Zählervariable, und wenn Runde (a, 3) ist gleich oder größer als b, inkrementiere ich den Zähler und füge eine Platzhalterliste hinzu.

Ich habe versucht mit set.intersect und Bewertung ohne Glück. Ich weiß, dass es einen saubereren Weg gibt. Wenn jemand eine Lösung mit numpy empfehlen kann, würde das auch helfen.

Zum Beispiel:

a = [0,0.14431, 0.1695151036, 0.2421644337, 0.2663808771, 0.4601124241, 0.4843288674, 0.5206535325, 0.6659521927, 0.7022768578, 0.7507097445, 0.8354672963, 0.9202248481, 0.9565495132, 1.0170906216] 


b = [0, 0.25, 0.50, 0.75, 1.0] 

Ich würde es gerne zurück:

output = [0,4,7,10,14] 

Antwort

0

kam in der Zwischenzeit mit diesem nach oben, abgeholzt Linien viel, aber nicht sicher, ob sein schneller, da es immer noch Iteriert die gesamte Schleife jedes Mal (und die a-Liste ist tatsächlich wie 10000 Elemente in der tatsächlichen Datei)

placeholder = [] 
    for value in b: 
     match_min_value = min(a, key=lambda x:abs(x-value)) 
     placeholder.append(a.index(match_min_value)) 
Verwandte Themen