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

认证高级PHP讲师

membalas semua(3)
小葫芦

Saya menukar kod anda supaya lebih mudah:

(Menukarnya berdasarkan cadangan @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')

(Kembali kemudian untuk menerangkan...)


Soalan yang saya jawab: Python-QA

大家讲道理

in sudah tentu lebih pantas daripada find kerana yang pertama memerlukan lebih sedikit carian atribut, panggilan fungsi dan lebih banyak operasi perbandingan daripada yang terakhir:

>>> 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

Jika anda mahu pergi lebih pantas, pertimbangkan untuk menggunakan Rust :-)

Selain itu, kod anda tidak ditulis dengan baik. Adalah disyorkan untuk menggunakan dengan bukannya menutup secara manual untuk operasi fail.

PHPzhong

Kerumitan masa dalam set ialah O(1)
Kerumitan masa dalam senarai ialah O(n)

Anda boleh cuba menggunakan set semasa memasang

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!