2012-06-06 16 views
7

बस 7 दिनों में पाइथन 3 सीखा, और मुझे यह महसूस हो रहा है कि बाइट तारों की मेरी समझ में एक छेद है। पायथन 3 में, मान लीजिए कि मेरे पास बाइट स्ट्रिंग b'1234' है। इसके इटरेटर पूर्णांक रिटर्न:पायथन 3 बाइट्स.इंडेक्स: बेहतर तरीका?

Python 3.2.3 (default, May 26 2012, 18:49:27) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 

>>> for z in b'1234': 
... print(type(z)) 
... 
<class 'int'> 
<class 'int'> 
<class 'int'> 
<class 'int'> 

मैं बाइट स्ट्रिंग में एक पूर्णांक प्राप्त कर सकते हैं (in की परिभाषा है कि यह समानता के लिए खोज करता है):

>>> 0x32 in b'1234' 
True 

हालांकि, मैं सूचकांक प्राप्त करना चाहते हैं बाइट स्ट्रिंग में दिए गए पूर्णांक का।

>>> b'1234'.index(b'2') 
1 

अब, अगर मैं एक चर x है कि मैं खोजना चाहते हैं, यह सबसे अच्छा मैं के साथ आ गया है: bytes.index सबस्ट्रिंग की आवश्यकता है

>>> x = 0x32 
>>> b'1234'.index(bytes([x])) 
1 

मैं जानता हूँ कि अजगर और अधिक सुरुचिपूर्ण है उससे। मैं स्पष्ट रूप से कुछ स्पष्ट याद कर रहा हूँ। एक एकल पूर्णांक के अनुक्रम बनाने के अलावा ऐसा करने के लिए एक आसान तरीका के रूप में कोई विचार? या वह वास्तव में है?

+1

पीछे सवाल भी है, आप बाइट की अनुक्रमणिका क्यों खोजना चाहते हैं? – pepr

+0

यदि आपको पता होना चाहिए :) यह वर्चुअल मशीन का हिस्सा है, जिसके निर्देशों में से एक को बाइट की अनुक्रमणिका की आवश्यकता है। यह ज़ेड-मशीन स्पेक के संस्करण 3 को लागू करता है, जो उस इंजन के आधार पर ज़ोर और अन्य टेक्स्ट एडवेंचर्स खेलने के लिए उपयोग किया जाता है। यदि आप इसे देखना चाहते हैं, तो यह http://code.google.com/p/pyzmachine पर है। यह मेरा पहला प्रयास है, इसलिए सुधार के लिए अंक की सराहना की जाती है। –

उत्तर

5

हां, ऐसा करने का यह तरीका है।

यह अपने कोड बिंदु पर आधारित एक स्ट्रिंग में एक चरित्र के लिए खोज करने के लिए जिस तरह से से बहुत अलग नहीं है:

x = 0x32 
i ='1234'.index(chr(x)) 
+0

दिलचस्प - मुझे एहसास नहीं हुआ था कि chr() ने एक स्ट्रिंग बनाई है। ऐसा लगता है कि, वास्तव में, तार स्ट्रिंग के तत्व प्रकार के एक उदाहरण का प्रतिनिधित्व करने का एकमात्र तरीका है। –

+0

@RobertB: हां। पायथन को चार प्रकार का पता नहीं है। चरित्र (अन्य भाषाओं के विपरीत) तकनीकी रूप से लंबाई 1 के साथ केवल स्ट्रिंग है। – pepr

0

इसके अलावा, मार्क तीर्थ के अजगर 3, अध्याय 4. Strings में गोता पर एक नजर है, धारा 4.6. Strings vs. Bytes। यह अच्छी तरह से बताता है कि पुरानी पायथन 2.x तारों के साथ समस्याएं क्या हैं (जो पाइथन 3 में बाइट प्रकार बन गईं) और कैसे नया पायथन 3 स्ट्रिंग सिद्धांत रूप से अलग है।