2015-09-08 2 views
-4

Я пытаюсь найти строку в массиве, но даже если строка содержится в массиве, переменная возникает с False при печати переменной I используется для поиска строки. Любая помощь будет оценена, вот код внизу:Я не могу найти строку в подмассиве в массиве массивов

Name='Admin' 
array=[['Joseph', '03', '01', 'NN'], ['Seph', '10', '08', '09'], ['Jo', '05', '04', '07'], ['Mark', '01', 'NN', 'NN'], ['BigDave', '00', '02', 'NN'], ['Davy', '03', 'NN', 'NN'], ['Admin', '10', 'NN', 'N']] 
check=Name in array 
print(check) 

Результатом этой печати результатов в этом False, и я не понимаю, почему он это делает.

+1

Поскольку 'in array' only search верхний уровень списка, а не внутренние списки. Вы имели в виду, например, 'check = any (имя в подмассиве для подмассива в массиве)' или 'any (subarray [0] == Name ...)'? Альтернативно, реструктурируйте свои данные - словарь '{'Joseph': ['03', '01', 'nn'], ...}' позволит вам искать имена в 'O (1)', а не 'O (п) '. – jonrsharpe

+0

Да, я бы это сделал, но это означало бы, что мне придется реструктурировать мои данные complier –

+0

@jonrshape Мне также нужно добавить словарь –

ответ

0

Потому что когда вы спрашиваете, есть ли в массиве 'Admin', он не проверяет вложенные массивы. Вам нужно будет пройти через них, чтобы увидеть, существует ли в одном из них 'Admin'.

Name='Admin' 
array=[['Joseph', '03', '01', 'NN'], ['Seph', '10', '08', '09'], ['Jo', '05', '04', '07'], ['Mark', '01', 'NN', 'NN'], ['BigDave', '00', '02', 'NN'], ['Davy', '03', 'NN', 'NN'], ['Admin', '10', 'NN', 'N']] 
for subArray in array: 
    if Name in subArray: 
     print subArray 

Выходов:

['Admin', '10', 'NN', 'N'] 
0
ls = [] 
Name='Admin' 
array=[['Joseph', '03', '01', 'NN'], ['Seph', '10', '08', '09'], ['Jo','05', '04', '07'], ['Mark', '01', 'NN', 'NN'], ['BigDave', '00', '02', 'NN'], ['Davy', '03', 'NN', 'NN'], ['Admin', '10', 'NN', 'N']] 
for i in xrange(len(array)): 
    for j in xrange(len(array[i])): 
     print i, "...........", j, ".........", ls.append(array[i][j]) 

if 'Joseph' in ls: 
    print 'yes' 
else: 
    print 'no' 

Следовательно, нет «имени» ключевого слова в вашем коде, так что я поставил ключевое слово «Joseph» из списка

+0

Слишком сложно для чего я хочу –

0

Вы могли бы сделать что-то глупое например:

Name='Admin' 
array=[['Joseph', '03', '01', 'NN'], ['Seph', '10', '08', '09'], ['Jo', '05', '04', '07'], ['Mark', '01', 'NN', 'NN'], ['BigDave', '00', '02', 'NN'], ['Davy', '03', 'NN', 'NN'], ['Admin', '10', 'NN', 'N']] 
check = True in [Name in arr for arr in array] 
print(check) # prints True 
+0

Кажется, что это немного глупо –

+0

Совсем не глупо, но 'any (list)' гораздо читабельнее, чем 'True в списке' – nigel222

Смежные вопросы