2015-08-21 5 views
0

Je veux écrire un script Python 3 pour gérer mes dépenses, et je vais avoir un filtre de règles qui dit 'si la description contient une chaîne particulière, classer en x', et ces règles seront lues à partir de un fichier texte. La seule façon que je peux penser de faire ceci est d'appliquer str.find() pour chaque règle sur la description de chaque transaction, et casse si on est trouvé - mais c'est une solution O^2, y a-t-il un meilleure façon de le faire?Comment classer les entrées en Python sans O^2 runtime?

+1

Il n'y a rien de tel que 'O^2', il y a cependant' O (n^2) ', mais alors s'il vous plaît, définissez ce qu'est' n'. – bereal

+2

L'optimisation prématurée est la racine de tout mal - DonaldKnuth –

+1

On dirait que le temps d'exécution sera O (nm) si vous avez n transactions et m catégories – codebox

Répondre

1

Décochez la ponctuation de la description et split en mots. Faites les mots dans la description dans un set, et les catégories dans un autre set.

Depuis sets use dictionaries internally et dictionaries are built on hash-tables, en moyenne la vérification d'appartenance est O (1).

Seulement lorsqu'une transaction est entrée (ou modifié), se croisent les deux ensembles pour trouver les catégories applicables (le cas échéant), et ajouter les catégories à votre dossier de transaction (dict, namedtuple, peu importe).