2016-11-01 3 views
-4

Ich benutze bisect, um das erste Vorkommen von Datenpunkt> -6 zu finden, aber wenn ich mein Skript ausführe, findet es nur das zweite (und letzte) Vorkommen.Wie kommt die Halbierung nicht zu meiner Absicht?

import bisect 

    kk = [-9, -6, -4, -6, -8, -8, -7, -7, -6, -6, -5] 

    first = bisect.bisect(kk, -6) 
    print(first) 

Dieses Stück Code gibt "10" aus, sollte aber "2" sein. Kann mir jemand sagen warum? Es tut mir leid im Voraus für eine wahrscheinlich dumme Frage - ich bin sehr neu in Python!

+5

'bisect' führt eine binäre Suche durch, daher wird davon ausgegangen, dass Ihre Liste sortiert ist. Dein ist nicht sortiert. – Blender

Antwort

1

Wie the documentation sagt (Hervorhebung hinzugefügt):

Dieses Modul bietet Unterstützung für eine Liste in sortierter Reihenfolge beibehalten

Sie haben Ihre Liste zu sortieren, bevor Sie etwas mit bisect tun können .

+0

Okay - wie würde ich den Index der ersten Daten finden, die den Schwellenwert erreichen? – Blochio

+0

@Blochio entweder sortieren Sie Ihre Liste, oder führen Sie eine lineare Suche –

+0

@Blochio: Ich bin mir nicht sicher, was Sie denken, halbiert oder warum Sie es hier verwenden. Wenn Sie eine Frage haben, wie Sie etwas tun können (wie Sie das erste Vorkommen eines gegebenen Wertes in einer Liste finden), dann stellen Sie diese Frage direkt, anstatt nach 'bisect' zu fragen. – BrenBarn

Verwandte Themen