2017-10-23 1 views
0

Ich habe eine Liste, die aus drei Teilen besteht. Im ersten und dritten Teil sind alle Elemente wahr. Im zweiten Teil sind alle Elemente falsch.Die erste Indexnummer des dritten Teils der Liste

Ich möchte den ersten Index des dritten Teils wissen.

Zum Beispiel wird 5 angezeigt, nachdem der folgende Code ausgeführt wurde. Wie implementiere ich get_first_index_of_third_part in den folgenden Code? Ich denke, ich sollte numpy verwenden, kann nicht finden, wie.

three_parts_list = [True, True, False, False, False, True, True, True] 
ind = get_first_index_of_third_part(three_parts_list) 
print(ind) 
+0

Sie können Fügen Sie bitte Ihren Code für 'get_first_index_of_third_part' hinzu. – scharette

Antwort

2

Wenn Sie sagen, die drei Teile bestehen die ganze Zeit wir np.diff() mit argmax() durch Umwandlung der Wahr & Falsche Werte in int Präsenz bzw.

def gfi_third(x): 
    return (np.diff(x.astype(int)) > 0).argmax() + 1 

Beispielläufe verwenden:

three_parts_list = np.array([True, False, False, False, False, False,True, True]) 
three_parts_list2 = np.array([True, False, False, False, True, True,True, True]) 

gfi_third(three_parts_list) 
6 

gfi_third(three_parts_list2) 
4 
0

Schleife über die Liste, jedes Element mit dem vorherigen Vergleich:

def get_first_index_of_third_part(three_parts_list, part=3): 
    current_part = 0 
    old = None 
    for i, el in enumerate(three_parts_list): 
     if el != old: 
      # New part found 
      current_part += 1 
     # Stop at the beginning of the correct part 
     if current_part == part: 
      return i 
     # Keep record of previous element 
     old = el 

Hier wird das part Argument der get_first_index_of_third_part Funktion bestimmt die Anzahl der Teile und standardmäßig auf 3.

0

können Sie erreichen dies durch Iterieren über Array

def get_first_index_of_third_part(l): 
    # assuming the three parts always exists. 
    for i in range(1,len(l)): 
     if not l[i-1] and l[i]: 
      return i 
0

Check für ersten Fall, in dem das Element in der Liste falsch ist, und der nächste Punkt True

def get_first_index_of_third_part(three_parts_list): 
    for i in range(len(three_parts_list)-1): 
     if three_parts_list[i] == False and three_parts_list[i+1] == True: 
      print(i) 
-1

Ein Algorithmus den Index des zu Beginn des dritten Teils wäre zu finden:

  1. Split-Liste in Teile
  2. Längen ersten beiden Teile hinzufügen

Das mit itertools.groupby und itertools.islice getan werden kann:

parts = itertools.groupby(three_parts_list) 
result = sum(len(list(items)) for _, items in itertools.islice(parts, 2)) 
Verwandte Themen