Tôi đã gặp sự cố tương tự. Tôi sử dụng% timeit Jupyter để kiểm tra:
import re
sent = "a sentence for measuring a find function"
sent_list = sent.split()
print("x in sentence")
%timeit "function" in sent
print("x in token list")
%timeit "function" in sent_list
print("regex search")
%timeit bool(re.match(".*function.*", sent))
print("compiled regex search")
regex = re.compile(".*function.*")
%timeit bool(regex.match(sent))
x trong câu 61,3 ns ± 3 ns mỗi vòng lặp (.. Có nghĩa là ± dev std 7 chạy, 10000000 vòng mỗi)
x trong danh sách thẻ 93,3 ns ± 1,26 ns mỗi vòng lặp (trung bình ± dev std.. 7 chạy, 10000000 vòng mỗi)
regex tìm kiếm 772 ns ± 8,42 ns mỗi vòng lặp (trung bình ± dev std.. 7 chạy, 1000000 vòng mỗi)
tìm kiếm regex được biên dịch 420 ns ± 7,68 ns trên mỗi vòng lặp (trung bình ± std. Trong số 7 lần chạy, 1000000 vòng lặp)
Biên dịch nhanh nhưng đơn giản là tốt hơn.
Nguồn
2017-12-02 07:47:42
Đối với một lần tắt, tôi khá chắc chắn regex sẽ chậm hơn, vì phí phụ trội. –
Bạn nên cẩn thận so sánh hai, vì chúng có chức năng khác nhau. Tìm kiếm toàn bộ chuỗi, trong khi đối sánh khớp với chỉ bắt đầu (nghĩa là nó có thể thoát sớm, tùy thuộc vào dữ liệu). Vì vậy, bạn đang so sánh táo và cam ở đó. –