2013-08-26 30 views
10

Tôi cần phải tìm mẫu thành chuỗi và thấy rằng chúng ta có thể sử dụng hoặc tìm thấy. Bất cứ ai có thể đề nghị tôi cái nào sẽ tốt hơn/nhanh trên chuỗi. Tôi không cần phải tìm chỉ mục mẫu như tìm cũng có thể trả về chỉ số của mẫu.tìm vs hoạt động trong chuỗi python

temp = "5.9" 
temp_1 = "1:5.9" 
>>> temp.find(":") 
-1 
>>> if ":" not in temp: 
    print "No" 

No 

Trả lời

22

Sử dụng in, nó sẽ nhanh hơn.

[email protected]:~$ python -m timeit 'temp = "1:5.9";temp.find(":")' 
10000000 loops, best of 3: 0.139 usec per loop 
[email protected]:~$ python -m timeit 'temp = "1:5.9";":" in temp' 
10000000 loops, best of 3: 0.0412 usec per loop 
+3

Không chỉ nhanh hơn. Nó dễ đọc hơn: 'nếu chuỗi con trong văn bản: ...' là tiếng Anh đơn giản. – Bakuriu

6

Chắc chắn sử dụng in. Nó được làm cho mục đích này, và nó nhanh hơn.

str.find() không được sử dụng cho các tác vụ như thế này. Nó được sử dụng để tìm chỉ mục của một ký tự trong một chuỗi, không phải để kiểm tra xem một ký tự có nằm trong một chuỗi hay không. Do đó, nó sẽ chậm hơn nhiều.

Nếu bạn đang làm việc với dữ liệu lớn hơn nhiều, sau đó bạn thực sự muốn được sử dụng in cho hiệu quả tối đa:

$ python -m timeit -s "temp = '1'*10000 + ':' " "temp.find(':') == -1" 
100000 loops, best of 3: 9.73 usec per loop 
$ python -m timeit -s "temp = '1'*10000 + ':' " "':' not in temp" 
100000 loops, best of 3: 9.44 usec per loop 

Nó cũng nhiều hơn nữa có thể đọc được.

Here's a documentation link about the keyword và cũng là related question.

+0

Điều gì "có thể là vấn đề"? Ví dụ của bạn cho thấy rằng có rất ít sự khác biệt về hiệu suất khi làm việc với các chuỗi lớn. – flornquake

+0

@flornquake Tôi đã làm rõ – TerryA

+0

Điểm của tôi là sự khác biệt (percenage) dường như không phải là tất cả những gì lớn khi làm việc với các chuỗi lớn. Tôi nghĩ bạn đã quên cờ '-s' trước chuỗi đầu tiên. – flornquake

1

Sử dụng trong sẽ nhanh hơn khi sử dụng để cung cấp cho bạn mẫu cũng như chỉ mục của nó vì vậy sẽ mất thêm thời gian để tính chỉ mục của chuỗi so với Tuy nhiên, nếu bạn không giao dịch với dữ liệu lớn thì nó sẽ là vấn đề cần thiết cho những gì bạn sử dụng.

Các vấn đề liên quan