Я пытаюсь выполнить сравнение строк между двумя объектами,
%load_ext cython # jupyterlab
%%cython --annotate
skills1 = {
"java": ["java", "j2ee"],
"python": ["Cython", "pypi"],
"application development": ["software development"],
}
skills2 = ["python", "j2ee", "software development"]
cdef int count = 0
for i, vals in skills1.items():
for j in skills2:
if j == i or j in vals:
count += 1
break
print("score", (count / len(coreskills))*100)
Благодаря тегу --annotate я смог узнать, есть ли какое-либо взаимодействие с Python, но все строки, кроме одной, были желтыми.
Поэтому я думаю, что не оптимизирую код. Может ли кто-нибудь помочь мне написать эту функциональность на cython, чтобы я мог получить скорость.
примечание: переменные skills1 and 2
— это словарь и список python, которые возвращаются другой функцией, я не знаю, как преобразовать их в словарь cython и массив cython
«Я не знаю, как преобразовать их в словарь cython и массив cython» - словаря Cython не существует. Массив Cython существует, но на самом деле он предназначен для числовых данных, поэтому он вам мало поможет]
Есть ли у
cython
собственные строки и строковые методы на основеC
? Или это все еще строки Python?items()
преобразуетdict
в список (списки ol).i
иj
— это строки Python.j==i
иj in vals
используют тесты на равенство строк Python. Строки Python представляют собой юникод, что значительно сложнее, чем байтовые строки/ASCII Py2, где символы представляют собой одиночные байты (7 бит). Исходные строки, встроенные вc
, были «Строки на самом деле представляют собой одномерный массив символов, заканчивающийся нулевым символом», но существуют различные библиотеки многобайтовых строк.@hpaulj Значит, я не могу оптимизировать его дальше?
@DavidW, так что я должен просто придерживаться python, если cython не предлагает больших преимуществ в производительности. Я предполагал, что cython ускорит процесс.
Одним из подходов было бы использование типов С++ в Cython. Это стоило бы того, если бы вы могли генерировать свои данные в Cython, но, вероятно, нет, если данные поступают из Python. Предположительно ваш пример, если урезанный и у вас большие источники данных, которые как-то подгружаются?