2013-08-26 9 views
10

में ऑपरेशन बनाम खोजें मुझे स्ट्रिंग में पैटर्न खोजने की आवश्यकता है और पाया गया है कि हम इसका उपयोग या ढूंढ भी सकते हैं। क्या कोई मुझे सुझाव दे सकता है कि स्ट्रिंग पर कौन सा बेहतर/तेज होगा। मुझे पैटर्न की अनुक्रमणिका नहीं ढूंढनी चाहिए क्योंकि खोज पैटर्न की अनुक्रमणिका भी वापस कर सकता है।स्ट्रिंग पायथन

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

No 

उत्तर

22

in का उपयोग करें, यह तेज़ है।

[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

न केवल यह तेज़ है। इसे पढ़ना आसान है: 'अगर पाठ में सबस्ट्रिंग: ...' सादा अंग्रेजी है। – Bakuriu

6

निश्चित रूप से in का उपयोग करें। यह इस उद्देश्य के लिए बनाया गया था, और यह तेज़ है।

str.find() इस तरह के कार्यों के लिए उपयोग नहीं किया जाना चाहिए। यह किसी स्ट्रिंग में किसी वर्ण की अनुक्रमणिका को खोजने के लिए प्रयोग किया जाता है, यह जांचने के लिए कि कोई वर्ण स्ट्रिंग में है या नहीं। इस प्रकार, यह बहुत धीमा हो जाएगा।

आप बहुत बड़ा डेटा के साथ काम कर रहे हैं, तो आप वास्तव में अधिकतम दक्षता के लिए in का उपयोग किया जा करना चाहते हैं:

$ 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 

यह भी बहुत अधिक पठनीय है।

Here's a documentation link about the keyword, और related question भी।

+0

क्या "कोई मुद्दा हो सकता है"? आपके उदाहरण से पता चलता है कि बड़े तारों के साथ काम करते समय प्रदर्शन में थोड़ा अंतर होता है। – flornquake

+0

@flornquake मैंने – TerryA

+0

को स्पष्ट किया है मेरा मुद्दा यह था कि बड़े टुकड़ों के साथ काम करते समय (percenage) अंतर इतना बड़ा प्रतीत नहीं होता है। मुझे लगता है कि आप पहली स्ट्रिंग से पहले 'एस' ध्वज भूल गए थे। – flornquake

1

में उपयोग करते हुए तेजी से हो जाएगा का उपयोग कर के रूप में में केवल पैटर्न प्रदान करता है, जबकि यदि आप पाते हैं का उपयोग यह आप पैटर्न भी मिल जाएगी इसकी सूचकांक के रूप में तो यह स्ट्रिंग के सूचकांक की गणना में कुछ अतिरिक्त समय लगेगा की तुलना में में। हालांकि यदि आप बड़े डेटा से निपट नहीं रहे हैं तो यह आपके द्वारा उपयोग किए जाने वाले मामले को कम करता है।

संबंधित मुद्दे