性能 - python 的in 和 find 执行效率问题
PHP中文网
PHP中文网 2017-04-18 09:22:21
0
3
761
PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(3)
小葫芦

J'ai modifié ton code donc ça devrait être plus simple :

(Je l'ai modifié en fonction de la suggestion de @evian)

import os
import sys

def getinfo(filename) :
    info = {}
    with open(filename, 'r') as f:
        for line in f:
            ID, name = line.strip().split()
            info[ID] = name
    return info


def matchname(info, input_file, output_file) : 
    with open(input_file, 'r') as reader, open(output_file, 'w') as writer:
        for line in reader:
            n1, n2, content = line.strip().split()
            for ID, name in info.items():
                if name in content:
                    print(n1, n2, name, ID, sep='\t', file=writer)


if __name__ == '__main__':
    info_filename = 'aa.txt'
    content_filename = 'bb.txt'
    result_filename = 'final_output2.txt'
    info = getinfo(info_filename)
    matchname(info, content_filename, result_filename)
    print('done')

(Reviendrez plus tard pour expliquer...)


Questions auxquelles j'ai répondu : Python-QA

大家讲道理

in est certainement plus rapide que find car le premier nécessite moins de recherches d'attributs, d'appels de fonctions et plus d'opérations de comparaison que le second :

>>> def t():
...   return "abctestdef".find("testx")
... 
>>> import dis
>>> dis.dis(t)
  2           0 LOAD_CONST               1 ('abctestdef')
              3 LOAD_ATTR                0 (find)
              6 LOAD_CONST               2 ('testx')
              9 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
             12 RETURN_VALUE
>>> def t():
...   return "test" in "abctestdef"
... 
>>> dis.dis(t)
  2           0 LOAD_CONST               1 ('test')
              3 LOAD_CONST               2 ('abctestdef')
              6 COMPARE_OP               6 (in)
              9 RETURN_VALUE

Si vous souhaitez aller plus vite, pensez à utiliser Rust :-)

De plus, votre code n'est pas très bien écrit. Il est recommandé d'utiliser with au lieu de fermer manuellement pour les opérations sur les fichiers.

PHPzhong

La complexité temporelle de l'ensemble est O(1)
La complexité temporelle de la liste est O(n)

Vous pouvez essayer d'utiliser des ensembles lors de l'assemblage

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal