2016-04-05 5 views
0

Wenn ich so etwas wie habe:Woher weißt du, ob etwas in einem Array in Python ist oder nicht?

list = [[1,2,3],[4,5,6],[7,8,9]] 

Dann, wie ich überprüfen, ob 1 in dem ersten, zweiten ist oder dritte Array?

Ich will es in der Lage sein, um einen Ausdruck zu machen, wie:

if 1 is in list 1: 

    do something 

elif i is in list 2: 

    do something 

else: 

    do something 
+0

Welches Problem versuchen Sie mit diesem Code zu lösen? Das scheint ein [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

Antwort

0

Nun, wenn Sie den Inhalt der Liste kennen, können Sie

if 1 in list[0]: 
    do_something() 
elif 1 in list[1]: 
    do_something_else() 
else: # 1 is in list[2] 
    do_something_different() 
2

Versuchen Sie es mit any verwenden:

any(1 in sub for sub in [[1,2,3],[4,5,6],[7,8,9]]) 

>>> list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
>>> any(1 in sub for sub in list) 
True 
>>> any(10 in sub for sub in list) 
False 
>>> any(7 in sub for sub in list) 
True 
>>> 
0

Zunächst einmal: Ich weiß, es ist nur ein Beispiel, aber verwenden Sie list nicht als eine Variable in Python. Es ist eine Schlüsselwort/eingebaute Funktion.

Zweitens: Sie können Iteration verwenden, um dies zu erreichen. Sie können durch die Mitglieder eines list (oder einem iterable Objekt oder jede Iterator) wie folgt durchlaufen:

for item in L: 
    # do something with item 

Sie den Überblick über die Anzahl der Male halten können Sie die Schleife eingegeben haben mit der enumerate Funktion. Die enumerate Funktion gibt eine zwei-Tupel in Form von member_index_number, member:

for num,item in enumerate(L): 
    # do something with num and item 

Fast there- jetzt Sie brauchen eine Möglichkeit, die obige Iteration mit Ihrem list von Funktionen zu verknüpfen. Normalerweise geschieht dies in Python mit einem Wörterbuch, aber Sie können auch eine Liste verwenden.

# list way 
funcs_list = [f1, f2, f3] 
for num,item in enumerate(L): 
    if 1 in item: 
     funcs_list[funcs_list.index(num)]() 
     break 

# dictionary way 
funcs_dict = {0: f1, 1: f2, 2: f3} 
for num,item in enumerate(L): 
    if 1 in item: 
     funcs_dict[num]() 
     break 

Die Dictionary-Methode wird normalerweise bevorzugt, weil es viel sauberer aussieht.

0

von "Dive Into Python" Abgeleitet

list = [[1,2,3],[4,5,6],[7,8,9]] 
if 1 in list[0]: 

    do something 

elif 1 in list[1]: 

    do something 

else: 

    do something 

... und so weiter. Das Schlüsselwort in nimmt ein vorangestelltes Wertargument und gibt true zurück, wenn dieser Wert andernfalls list, false ist. Die einzige andere Information ist list[0], die auf Ihr erstes Element in der Top-Level-Liste (die erste Unterliste) usw. zugreift, so dass mit dem Schlüsselwort in nach einer bestimmten Ganzzahl gesucht werden kann.

Hier ist die erwartete Ausgabe:

>>> list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
>>> 1 in list[0] 
True 
>>> 1 in list[1] 
False 

Um alle Listen suchen Sie die for Schlüsselwort Schleife über Ihre Listen verwenden können und any true zurück, wenn eine der Teil-Listen anzeigen lassen.

>>> any(1 in sublist for sublist in list) 
True 
>>> any(42 in sublist for sublist in list) 
False 
0

Sie können den integrierten "in" -Operator von Python verwenden. Dieser Operator gibt True zurück, wenn sich das Element im iterablen Modus befindet (in diesem Fall eine Liste), oder False, wenn dies nicht der Fall ist.

x_in_array = x in array 

Der Python doc, die diese umfasst hier ist, unter Abschnitt 5.6: https://docs.python.org/2/library/stdtypes.html

Ihre if/elif/else-Anweisungen würde dann wie folgt aussehen:

if x in array_1: 
    # do something 
elif x in array_2: 
    # do something 
else: 
    # do something else 
0

Wenn Sie zurückkehren wollen der Index der Liste:

>>> def idx_check(i, l): 
...  for (idx, val) in enumerate(l): 
...   if i in val: 
...    return idx 
...  return None 
... 

>>> l = [[1,2,3],[4,5,6],[7,8,9]] 
>>> idx_check(1, l) 
0 
>>> idx_check(4, l) 
1 
>>> idx_check(7, l) 
2 
Verwandte Themen