Используйте apply
с лямбда-функцией и index
с обратным lists
, это хорошо работает, потому что списки основаны на 0, проиндексированы в python:
df['count'] = df['A'].apply(lambda x: x[::-1].index('DePe*'))
print (df)
A count
0 [ch*, co*, DePe*, DePe*, DePe*, pm*, tpm*, lep*] 3
1 [ch*, co*, DePe*, DePe*, DePe*, am*, te*, qe*,... 4
2 [ch*, co*, DePe*, ch*, DePe*, DePe*, tpm*, lep*] 2
3 [ch*, DePe*, eeae*, ps*, er*] 3
Если возможно, какое-то значение не существует, возможно укажите значение в выражении try-except
:
def f(x):
try:
return x[::-1].index('DePe*')
except ValueError:
return np.nan #or return 0
df['count'] = df['A'].apply(f)
В большой степени все они?
Если Вы понимаете функциональные языки, можно записать обязательные программы, которым "сообщает" функциональный стиль. Это уведет Вас от побочных эффектов, и к программам, в которых чтение текста программы в какой-то конкретной точке достаточно, чтобы позволить Вам действительно знать то, что значение программы в той точке.
Назад в Рассвет Времени мы раньше волновались о "связи" и "сцеплении". Изучение FP приведет Вас писать системы с оптимальной (минимальной) связью и высокую связность.
Вот вещи, которые мешают выполнению FP на языке неFP:
Я успешно использовал функции высшего порядка много, особенно вид, которые передаются в, а не вид, которые возвращаются. Вид, которые возвращаются, может быть немного утомительным, но может быть моделирован.
Все виды применимых структур данных и рекурсивных функций работают хорошо на императивных языках.
Вещи я отсутствую больше всего:
Почти никакие императивные языки не гарантируют, что оптимизировали каждый последний вызов.
Я не знаю ни о каком императивном языке, который поддерживает анализ случая сопоставлением с образцом.
Не наличие в первом классе функционирует, действительно помещает увлажнитель на запись функциональных программ, но существует несколько вещей, которые можно сделать, которые не требуют их. Первое должно сторониться изменяемого состояния - пытаются иметь больше всего, или все Ваши классы возвращают новые объекты, которые представляют измененное состояние вместо того, чтобы внести изменение внутренне. Как пример, если Вы писали связанный список с add
операция, Вы хотели бы возвратить новый связанный список из add
в противоположность изменению объекта.
В то время как это может сделать Ваши программы менее эффективными (из-за увеличенного числа объектов, создаваемых, и уничтоженных) Вы получите способность более легко отладить программу, потому что состояние и операция объектов становятся более предсказуемыми, не говоря уже о способности вложить вызовы функции более глубоко, потому что у них есть вводы и выводы состояния.