Rumah > Soal Jawab > teks badan
高洛峰2017-04-18 09:24:21
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
大家讲道理2017-04-18 09:24:21
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.
PHPz2017-04-18 09:24:21
Kerumitan masa dalam set ialah O(1)
Kerumitan masa dalam senarai ialah O(n)
Anda boleh cuba menggunakan set semasa memasang