2011-07-02 53 views
5

मैंने प्रोजेक्ट यूलर पर एक समस्या हल की लेकिन इसे चलाने में लगभग 4 मिनट लग गए, जो अनुशंसित समय से ऊपर है, इसलिए मैं मंच में विभिन्न समाधानों को देख रहा था। उनमें से एक सूची समझ में << प्रतीक शामिल था। यह वही है<< पायथन में क्या करता है?

blist.extend([(i << 1) + 3 for i in range(num) if alist.get(i)]) 

की तरह देखा मैं कहीं भी वास्तव में क्या इस << प्रतीक नहीं मिल सकती है। क्या कोई मेरी मदत कर सकता है?

+2

http://docs.python.org/library/operator.html#mapping-operators-to से मैं गुणा -फंक्शन – Trufa

उत्तर

10

यह एक bit shift operator (Python docs) है, और इस तरह के सी, जावा, पीएचपी, आदि के रूप में कई प्रोग्रामिंग भाषाओं, के बीच आम है अजगर डॉक्स के अनुसार:

वे बाईं ओर पहला तर्क बदलाव या दूसरे तर्क द्वारा दिए गए बिट्स की संख्या से दाएं।

एन बिट्स द्वारा एक सही शिफ्ट को विभाजन (2, एन) द्वारा परिभाषित किया गया है। एन बाइट्स द्वारा बाएं शिफ्ट को पाउ (2, एन) के साथ गुणा के रूप में परिभाषित किया गया है। नकारात्मक बदलाव ValueError अपवाद बढ़ाएं।

तो अपने विशिष्ट मामले में, i << 1 1 बिट, जो 2^1, या बस 2.

+0

तो यदि यह है I >> 1 यह mod (i, 2) होगा या यह दशमलव के ठीक पहले दाईं ओर जाएगा? – gtmanfred

+0

दायां शिफ्ट 2^एन द्वारा विभाजित है, या यदि आपने उद्धृत किया है, तो बस 2. मेरे सिर के ऊपर से, मुझे लगता है कि यह सिर्फ पूर्णांक विभाजन भी है, इसलिए मुझे नहीं लगता कि आपको दशमलव मान मिलेंगे ... –

+0

ठीक है जो मेरा मतलब था, मुझे नहीं पता कि मैंने क्यों कहा mod। धन्यवाद – gtmanfred

1

यह एक बाइनरी bitwise शिफ्ट ऑपरेटर है।

x << n 
x shifted left by n bits 

x >> n 
x shifted right by n bits 
1

बाएं पारी ऑपरेटर है कि से गुणा करने के बराबर है से बाईं पारी का मतलब है। यह 1 कदम से छोड़ दिया करने के लिए मैं में बिट्स के सभी बदलाव, प्रभावी रूप से 2.

http://docs.python.org/py3k/reference/expressions.html#shifting-operations

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