2016-04-12 15 views
2

listWenn ich eine Liste von Listen habe. Wo jede Unterliste sich von der nächsten unterscheidet, manchmal sogar leer.Suchlisten für eine Sequenz

list[0]=['This','is','the','sequence'] 
    list[1]=['This','is','another','sequence'] 
    list[2]=[] 
    list[n]=[a,b,c,d] 

Wie kann ich die Listen durchsuchen und richtig identifizieren, wenn die Liste [n] auftritt. (IE identifiziert A, B, C, dann d extrahiert vorkommender.)

ich versuchte

for lists in my_list[1:]: 
      if not lists: 
      continue 
      if (lists[0]=='a') & (lists[1]=='b') &(lists[2]=='c'): 
      extracted_variable = lists[3] 

Jedoch I 'Listenindex außerhalb des Bereichs' für die leeren Listen empfangen. Welche Funktionen können zu meinem Vorteil genutzt werden?

Antwort

0

Antwort:

for l in lists: 
    if l[:3] == ['a', 'b', 'c'] and len(l) > 3: 
     print l[3] 

Erläuterung:

Der Grund, warum Sie ‚Listenindex außerhalb des zulässigen Bereichs‘ auf leere Listen bekommen, weil Sie versuchen, einen Index zuzugreifen, die außerhalb des zulässigen Bereichs (Listen [0 ] == 'a'). Die von mir verwendete Syntax l[:3] gibt Ihnen eine Unterliste der Liste mit den ersten 3 Elementen. zum Beispiel wird diese [1,2,3,4][:3] diese [1,2,3] zurückgeben. Für leere Listen gibt es kein Problem, weil es nur eine leere Liste zurückgibt.

Also in der Weise, die ich oben verwendet haben, nehmen wir nur eine Unterliste von 3 Elementen und überprüfen, ob es eine Liste von ["a", "b", "c"] ist. Wenn ja, stellen wir sicher, dass es mindestens ein weiteres Element in der Liste gibt (indem wir len() der Liste überprüfen) und wenn ja, drucken wir es aus.

Auch Sie sollten nicht das Schlüsselwort "list" in Ihrem Code für Variablennamen verwenden, aber ich nehme an, es könnte nur ein Beispiel für die Frage sein.

Sie sollten mehr über Listen in Python lesen und wie sie verwendet werden (http://www.tutorialspoint.com/python/python_lists.htm)

0

erste Überprüfung Länge von Liste ist größer 2 und dem Check Bedingungen gelten wie folgt: for-Schleife:

my_list = [['This', 'is', 'the', 'sequence'], ['This', 'is', 'another', 'sequence'], [], ['a', 'b', 'c', 'd']] 
for lst in my_list: 
    if len(lst) > 2 and lst[0] == 'a' and lst[1] == 'b' and lst[2] == 'c': 
     extracted_variable = lst[3] 
     print extracted_variable 

mit Liste Verständnis:

my_list = [['This', 'is', 'the', 'sequence'], ['This', 'is', 'another', 'sequence'], [], ['a', 'b', 'c', 'd']] 
a = [lst[3:] for lst in my_list if len(lst) > 2 and lst[0] == 'a' and lst[1] == 'b' and lst[2] == 'c'] 
print a[0][0] 

Ausgabe:

d 

hoffe, das hilft :)

0

Sie können die Technik des Schiebe-/Rollfenster gelten:

from itertools import islice 

all_lists = [ 

    [1,2,3], 
    [4,5,6,5,4,7,8], 
    [7,8,9,4,4], 
    [1,], 
    ["a","b","c"], 

] 

## All the lists you want to find 
## We use tuples becuase lists are not hashable. You also can do this tuple([1,2,3]) 
target_list_1 = ("a","b","c") 
target_list_2 = (1,2,3) 

## A counter for your target lists you want to find 
counter_dict = { 
    target_list_1 : 0, 
    target_list_2 : 0, 
} 


generator = islice(all_lists, len(all_lists)) 

for item in generator: 

    ## You can add as many checking conditions as you want, you may 
    ## also use switch statment here, whatever you want 

    if item == list(target_list_1): 
     counter_dict[target_list_1] +=1 

    if item == list(target_list_2): 
     counter_dict[target_list_2] +=1 


print counter_dict 

Ausgang:

{ 
    ('a', 'b', 'c') : 1, 
    (1, 2, 3)  : 1 
} 
Verwandte Themen