Hướng dẫn python fast search list - danh sách tìm kiếm nhanh python

Khi bạn làm một cái gì đó như "test" in a trong đó a là danh sách, Python thực hiện tìm kiếm tuần tự trong danh sách hoặc nó tạo ra một biểu diễn bảng băm để tối ưu hóa việc tra cứu? Trong ứng dụng tôi cần điều này vì tôi sẽ thực hiện rất nhiều bộ tra cứu trong danh sách, vì vậy tốt nhất là làm một cái gì đó như b = set(a) và sau đó "test" in b? Ngoài ra, lưu ý rằng danh sách các giá trị tôi sẽ không có dữ liệu trùng lặp và tôi thực sự không quan tâm đến đơn đặt hàng của nó; Tôi chỉ cần có khả năng kiểm tra sự tồn tại của một giá trị.

Khi được hỏi ngày 13 tháng 5 năm 2011 lúc 14:45May 13, 2011 at 14:45

Hướng dẫn python fast search list - danh sách tìm kiếm nhanh python

Ian Burrisian BurrisIan Burris

6.16721 Huy hiệu vàng58 Huy hiệu bạc80 Huy hiệu Đồng21 gold badges58 silver badges80 bronze badges

Ngoài ra, lưu ý rằng danh sách các giá trị tôi sẽ không có dữ liệu trùng lặp và tôi thực sự không quan tâm đến đơn đặt hàng của nó; Tôi chỉ cần có khả năng kiểm tra sự tồn tại của một giá trị.

Không sử dụng danh sách, thay vào đó sử dụng set(). Nó có chính xác các thuộc tính bạn muốn, bao gồm một bài kiểm tra nhanh ____10.

Tôi đã thấy các tốc độ tăng tốc từ 20 lần trở lên ở những nơi (chủ yếu là số lượng nặng) trong đó một danh sách được thay đổi cho một bộ.

Đã trả lời ngày 13 tháng 5 năm 2011 lúc 14:47May 13, 2011 at 14:47

8

"test" in a với danh sách a sẽ thực hiện tìm kiếm tuyến tính. Thiết lập bảng băm khi đang bay sẽ đắt hơn nhiều so với tìm kiếm tuyến tính. "test" in b Mặt khác sẽ tìm kiếm một lần tra cứu O (1).

Trong trường hợp bạn mô tả, dường như không có lý do để sử dụng danh sách qua một bộ.

Đã trả lời ngày 13 tháng 5 năm 2011 lúc 14:48May 13, 2011 at 14:48

Sven Marnachsven MarnachSven Marnach

550K114 Huy hiệu vàng920 Huy hiệu bạc822 Huy hiệu Đồng114 gold badges920 silver badges822 bronze badges

3

Tôi nghĩ rằng sẽ tốt hơn nếu đi với việc thực hiện thiết lập. Tôi biết thực tế là các bộ có thời gian tra cứu O (1). Tôi nghĩ rằng danh sách mất thời gian tra cứu O (n). Nhưng ngay cả khi danh sách cũng là o (1) tra cứu, bạn không mất gì với việc chuyển sang các bộ.

Hơn nữa, các bộ không cho phép các giá trị trùng lặp. Điều này cũng sẽ làm cho chương trình của bạn cũng hiệu quả hơn một chút về bộ nhớ

Đã trả lời ngày 13 tháng 5 năm 2011 lúc 14:49May 13, 2011 at 14:49

inspectorG4dgetinspectorG4dgetinspectorG4dget

107K25 Huy hiệu vàng140 Huy hiệu bạc236 Huy hiệu Đồng25 gold badges140 silver badges236 bronze badges

Danh sách và bộ dữ liệu dường như có cùng một lúc và sử dụng "IN" chậm cho dữ liệu lớn:

>>> t = list(range(0, 1000000))
>>> a=time.time();x = [b in t for b in range(100234,101234)];print(time.time()-a)
1.66235494614
>>> t = tuple(range(0, 1000000))
>>> a=time.time();x = [b in t for b in range(100234,101234)];print(time.time()-a)
1.6594209671

Đây là giải pháp tốt hơn nhiều: Cách hiệu quả nhất để tra cứu/tìm kiếm trong danh sách lớn (Python)

Nó siêu nhanh:

>>> from bisect import bisect_left
>>> t = list(range(0, 1000000))
>>> a=time.time();x = [t[bisect_left(t,b)]==b for b in range(100234,101234)];print(time.time()-a)
0.0054759979248

Đã trả lời ngày 14 tháng 9 năm 2016 lúc 12:32Sep 14, 2016 at 12:32

1

Tôi đang thực hiện tìm kiếm văn bản trong một tệp TXT khá lớn (dòng 100k, 7mo) không lớn nhưng tôi cần rất nhiều tìm kiếm. Tôi muốn tìm một chuỗi đích và trả về dòng nơi nó xuất hiện. Tệp văn bản của tôi được định dạng để mục tiêu chỉ có thể xuất hiện trong một dòng.

Nội dung chính ShowShow

  • Làm cách nào để tìm kiếm một tệp văn bản trong Python?
  • Làm cách nào để tìm một từ cụ thể trong một tệp văn bản python?
  • Làm thế nào để tôi nhanh chóng đọc một tập tin trong Python?
  • Làm thế nào để bạn tìm kiếm nhiều tệp trong Python?

Tạo một chức năng và thay đổi thư mục mà bạn muốn tìm kiếm văn bản.Sau danh sách đó, thư mục và in các tập tin.hệ điều hành.CHDIR (đường dẫn) - Thay đổi thư mục làm việc hiện tại thành đường dẫn được chỉ định.

def lookup_line(target):
    #returns line of the target, or None if doesnt exist
    line=None
    dir=os.path.dirname(__file__)
    path=dir+'/file.txt'
    file=open(path,'r')
    while line==None:
        l=file.readline()
        l=unicode(l,'utf-8')
        if target in l:
            break
        if l=='': break #happens at end of file, then stop loop
    line=l
    if line=='':line=None #end of file, nothing has been found
    file.close()
    return line

Tôi đang thực hiện tìm kiếm văn bản trong một tệp TXT khá lớn (dòng 100k, 7mo) không lớn nhưng tôi cần rất nhiều tìm kiếm. Tôi muốn tìm một chuỗi đích và trả về dòng nơi nó xuất hiện. Tệp văn bản của tôi được định dạng để mục tiêu chỉ có thể xuất hiện trong một dòng.

Thanks!

Nội dung chính ShowAug 10, 2010 at 13:22

user375348user375348user375348user375348

Cách hiệu quả nhất là gì? Tôi thực hiện rất nhiều tìm kiếm vì vậy tôi muốn cải thiện tốc độ. Đây là mycode ngay bây giờ:1 gold badge6 silver badges23 bronze badges

2

  1. Tôi sử dụng mã Python này cho ứng dụng Google AppEngine.
  2. Hỏi ngày 10 tháng 8 năm 2010 lúc 13:22Aug 10, 2010 at 13:22
  3. 7491 Huy hiệu vàng6 Huy hiệu bạc23 Huy hiệu đồng1 gold badge6 silver badges23 bronze badges

Tải toàn bộ văn bản trong RAM cùng một lúc. Đừng đọc từng dòng.

Tìm kiếm mô hình trong blob. Nếu bạn tìm thấy nó, hãy sử dụng

>>> from bisect import bisect_left
>>> t = list(range(0, 1000000))
>>> a=time.time();x = [t[bisect_left(t,b)]==b for b in range(100234,101234)];print(time.time()-a)
0.0054759979248
4 để có được số dòng.

Nếu bạn không cần số dòng, hãy tìm EOL trước và tiếp theo để cắt dòng ra khỏi văn bản.Aug 10, 2010 at 13:27

Aaron Digullaaaron DigullaAaron DigullaAaron Digulla

Phim huy hiệu vàng 315K104104 gold badges584 silver badges808 bronze badges104 gold badges584 silver badges808 bronze badges

1

Nếu bạn đang tìm kiếm cùng một tệp văn bản nhiều lần, hãy xem xét lập chỉ mục tệp. Ví dụ: tạo một từ điển ánh xạ từng từ theo dòng nào của nó. Điều này sẽ mất một thời gian để tạo, nhưng sau đó sẽ thực hiện tìm kiếm O (1).

Nếu bạn đang tìm kiếm các tệp văn bản khác nhau hoặc không thể lập chỉ mục tệp vì một số lý do, bạn có thể sẽ không nhận được bất kỳ nhanh hơn thuật toán KMP.

EDIT: Chỉ mục tôi mô tả sẽ chỉ hoạt động cho các tìm kiếm từ duy nhất, không phải là tìm kiếm nhiều từ. Nếu bạn muốn tìm kiếm nhiều từ (bất kỳ chuỗi nào) thì có lẽ bạn sẽ không thể lập chỉ mục nó.

Đã trả lời ngày 10 tháng 8 năm 2010 lúc 13:31Aug 10, 2010 at 13:31Aug 10, 2010 at 13:31

Niki Yoshiuchiniki YoshiuchiNiki YoshiuchiNiki Yoshiuchi

16.3k1 Huy hiệu vàng33 Huy hiệu bạc43 Huy hiệu đồng1 gold badge33 silver badges43 bronze badges1 gold badge33 silver badges43 bronze badges

2

Đầu tiên, đừng giải mã rõ ràng byte.

from io import open

Thứ hai, hãy xem xét những thứ như thế này.

with open(path,'r',encoding='UTF-8') as src:
    found= None
    for line in src:
        if len(line) == 0: break #happens at end of file, then stop loop
        if target in line:
            found= line
            break
    return found

Điều này có thể được đơn giản hóa một chút để sử dụng

>>> from bisect import bisect_left
>>> t = list(range(0, 1000000))
>>> a=time.time();x = [t[bisect_left(t,b)]==b for b in range(100234,101234)];print(time.time()-a)
0.0054759979248
6 hoặc
>>> from bisect import bisect_left
>>> t = list(range(0, 1000000))
>>> a=time.time();x = [t[bisect_left(t,b)]==b for b in range(100234,101234)];print(time.time()-a)
0.0054759979248
7 thay vì
>>> from bisect import bisect_left
>>> t = list(range(0, 1000000))
>>> a=time.time();x = [t[bisect_left(t,b)]==b for b in range(100234,101234)];print(time.time()-a)
0.0054759979248
8. Nó sẽ chạy một sợi tóc nhanh hơn, nhưng việc thay đổi hơn một chút khi có nhiều lợi nhuận.

Đã trả lời ngày 10 tháng 8 năm 2010 lúc 13:26Aug 10, 2010 at 13:26Aug 10, 2010 at 13:26

S.LottS.LottS.LottS.Lott

377K79 Huy hiệu vàng503 Huy hiệu bạc773 Huy hiệu Đồng79 gold badges503 silver badges773 bronze badges79 gold badges503 silver badges773 bronze badges

Làm thế nào về tốc độ tìm kiếm 10GB/s? https://www.codeproject.com/articles/5282980/fastest-fulltext-vector-scalar-exact-searcher

Cách hiệu quả nhất là gì?

Cách hiệu quả nhất là sử dụng các vectơ, nếu không có sẵn thì hàm memmem () vô hướng nhanh nhất bạn có thể nhận được, đã xảy ra rằng bài viết trên cho thấy cả hai hoạt động, bạn cần các tệp văn bản khổng lồ đang đi qua biến thể memmem () railgun_nyotengu ( ) Trở thành nguồn mở trong phạm vi công cộng là cách để đi.open-source in public domain is way to go.open-source in public domain is way to go.

Đã trả lời ngày 27 tháng 10 năm 2020 lúc 14:36Oct 27, 2020 at 14:36Oct 27, 2020 at 14:36

GeorgigeorgiGeorgiGeorgi

1387 Huy hiệu đồng7 bronze badges7 bronze badges

1

Làm cách nào để tìm kiếm một tệp văn bản trong Python?

Cách tìm kiếm một chuỗi trong tệp văn bản...

Mở tệp trong chế độ đọc. Mở tệp bằng cách đặt đường dẫn tệp và chế độ truy cập vào hàm Open (). ....

Đọc nội dung từ một tập tin. Sau khi mở, hãy đọc tất cả nội dung của một tệp bằng phương thức Read (). ....

Tìm kiếm một chuỗi trong một tệp. ....

Dòng in và số dòng ..

Làm cách nào để tìm một từ cụ thể trong một tệp văn bản python?

Phương pháp 1: Tìm chỉ mục của chuỗi trong tệp văn bản bằng cách sử dụng readline () trong phương thức này, chúng tôi đang sử dụng hàm readline () và kiểm tra hàm find (), phương thức này trả về -1 nếu không tìm thấy giá trịvà nếu thấy nó trả về 0.Finding the index of the string in the text file using readline() In this method, we are using the readline() function, and checking with the find() function, this method returns -1 if the value is not found and if found it returns 0.Finding the index of the string in the text file using readline() In this method, we are using the readline() function, and checking with the find() function, this method returns -1 if the value is not found and if found it returns 0.

Làm thế nào để tôi nhanh chóng đọc một tập tin trong Python?

Python cách nhanh nhất để đọc một tệp văn bản lớn (một số GB)...

# Tệp: readline-example-3.py ..

File = Open ("Sample.txt").

Trong khi 1:.

dòng = file.ReadLines (100000).

Nếu không dòng:.

break..

Đối với dòng trong dòng:.

vượt qua # làm điều gì đó ** Văn bản mạnh mẽ **.

Làm thế nào để bạn tìm kiếm nhiều tệp trong Python?

Tạo một chức năng và thay đổi thư mục mà bạn muốn tìm kiếm văn bản.Sau danh sách đó, thư mục và in các tập tin.hệ điều hành.CHDIR (đường dẫn) - Thay đổi thư mục làm việc hiện tại thành đường dẫn được chỉ định.