2012-06-28 2 views
124

Если у меня есть массив строк, могу ли я проверить, не содержит ли строка в массиве без цикла for? В частности, я ищу способ сделать это в пределах if заявления, так что-то вроде этого:Проверьте, находится ли элемент в массиве/списке

if [check that item is in array]: 
+1

Я думаю, что вопрос уже ответил [здесь] (http://stackoverflow.com/questions/9542738/python-find-in-list) –

+0

Или лучше здесь: http://stackoverflow.com/questions/12934190/is-there-a-short -contains-function-for-lists – torina

+0

Возможный дубликат [Самый быстрый способ проверить, существует ли значение в списке] (https://stackoverflow.com/questions/7571635/fastest-way-to-check-if-a- value-exist-in-a-list) –

ответ

242

Предполагая, что вы имеете в виду «список», где вы говорите «массив», вы можете сделать

if item in my_list: 
    # whatever 
+45

... все? Я был Googling в течение 20 минут сейчас .... – SomeKittens

+2

@SomeKittens: список будет внутренне делать свой собственный цикл для тестирования членства. – jdi

+1

@jdi, и этот цикл будет работать намного быстрее, чем тот, который явно закодирован в Python, не говоря уже о том, что его легче читать. –

15

Я также предполагаю, что вы имеете в виду «список», когда вы говорите «массив». Решение Свена Марнаха хорошее. Если вы собираетесь делать повторные проверки в списке, то, возможно, стоит преобразовать его в набор или frozenset, который может быть быстрее для каждой проверки. Предполагая, что ваш список STRs называется subjects:

subject_set = frozenset(subjects) 
if query in subject_set: 
    # whatever 
-1

Вы также можете использовать тот же синтаксис для массива. Например, поиск в серии Pandas:

ser = pd.Series(['some', 'strings', 'to', 'query']) 

if item in ser.values: 
    # do stuff 
0

Используйте функцию лямбда.

Допустим, у вас есть массив:

nums = [0,1,5] 

Проверьте 5 находится в nums:

(len(filter (lambda x : x == 5, nums)) > 0) 

Это решение является более надежным. Теперь вы можете проверить, находится ли какое-либо число, удовлетворяющее определенному состоянию, в вашем массиве nums.

Например, проверить, существует ли какое-либо число, которое больше или равно 5 в nums:

(len(filter (lambda x : x >= 5, nums)) > 0) 
0

Вы должны использовать .values ​​для массивов. , например, у вас есть dataframe, который имеет имя столбца т.е. тест [ «Name»], вы можете сделать

if name in test['Name'].values : 
    print(name) 

для нормального списка вы не должны использовать .values ​​

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