2013-09-16 4 views
-1

Функция R ', которая представляет собой эффективный и параболизированный способ поиска символов в длинных строках векторов символов. Есть ли функция или простой способ реализовать это в python?Есть ли сопоставимая функция в python для функции «which» R?

+2

Не могли бы вы добавить образец кода с вводом и выводом, чтобы мы могли видеть, чего именно вы пытаетесь достичь? На первый взгляд, похоже, что «отображение карт», «фильтр» и/или список могут выполнять задание, но я не знаю, насколько мощным является «что». –

+1

Это нехорошее описание. Возможно, ссылка на документы R поможет. Кроме того, вам нужна точная функциональность или конкретное использование? –

+1

'which' находит в векторе, индекс которого соответствует заданному значению. Вы описали 'grep'. – plannapus

ответ

0

Я не совсем уверен, как работает R, но вот несколько идей, чтобы вы начали

lookingFor = 'a' 
print "the string of all '%s's is" %lookingFor, ''.join(char for char in myLongString if char==lookingFor) 
print "there are %s many instances of the character '%s' in the string '%s'" %(myLongString.count(lookingFor), lookingFor, myLongString) 
import collections 
print "there are %s many instances of the character '%s' in the string '%s'" %(collections.Counter(myLongString)[lookingFor], lookingFor, myLongString) 
2

В вещем способе получить индексы элементов перечислимой коллекции, если эти элементы удовлетворяют определенное условие заключается в использовании list comprehension вместе с enumerate(). Например, чтобы найти все индексы нечетных элементов в списке:

>>> mylist = [1,2,3,4,5,6,7,8] 
>>> [index for index, item in enumerate(mylist) if item%2] 
[0, 2, 4, 6] 
+0

Спасибо. Я также нашел модуль *** pandas ***, который, хотя и немного грубый по краям, обеспечивает ограниченное применение булевой векторной оценки, которую я искал. –

0

Или заворачивают в родовой функции:

>>> which = lambda targetList, f: [index for index, item in enumerate(targetList) if f(item)] 

например:

>>> mylist = [1,2,3,4,5,6,7,8] 
>>> which(mylist, lambda x: x % 2)