2012-05-31 19 views
7

से पिछले दो फ़ील्ड निकालें मैं अलग-अलग लंबाई के चर से पिछले दो फ़ील्ड मान निकालना चाहता हूं। उदाहरण के लिए, नीचे दिए गए तीन मानों पर विचार करें:विभाजित

fe80::e590:1001:7d11:1c7e 

ff02::1:ff1f:fb6 

fe80::7cbe:e61:f5ab:e62 ff02::1:ff1f:fb6 

ये तीन पंक्तियां चर की लंबाई हैं। मैं केवल पिछले दो फ़ील्ड मान निकालना चाहते हैं अगर मैं सीमांकक द्वारा प्रत्येक पंक्ति विभाजित: तीन लाइनों से

है, मैं चाहता हूँ:

7d11, 1c7e 

ff1f, fb6 

ff1f, fb6 

इस split() का उपयोग किया जा सकता है? मुझे कोई विचार नहीं मिल रहा है।

उत्तर

16

, तो s स्ट्रिंग IPv6 पता युक्त

s.split(":")[-2:] 

का उपयोग पिछले दो घटकों मिलता है। split() विधि सभी घटकों की एक सूची वापस कर देगी, और [-2:] इस सूची को केवल अंतिम दो तत्वों को वापस करने के लिए टुकड़ा करेगा।

+0

मैं मूल्यों को अलग कैसे कर सकता हूं:, यह पहली पंक्ति के लिए है, मैं 7 डी 11: 1c7e – learner

+0

जैसे मान कैसे प्राप्त कर सकता हूं जैसे कुछ डिलीमीटर डबल '' '' हैं, 'यह बेहतर होगा सभी कोलों को अंतरिक्ष में बदलें और 'split() ' – xvatar

+2

@ user1411416 का उपयोग करें, आप' ':' का उपयोग कर सकते हैं।()' – xvatar

15

आप सही से विभाजित करने के लिए str.rsplit() उपयोग कर सकते हैं:

>>> ipaddress = 'fe80::e590:1001:7d11:1c7e' 
>>> ipaddress.rsplit(':', 2) # splits at most 2 times from the right 
['fe80::e590:1001', '7d11', '1c7e'] 

इस पते का पहला भाग के अनावश्यक बंटवारे से बचा जाता है।

+1

सच है, लेकिन मेरे परीक्षण के अनुसार, यह केवल 6% तेज है। –

+2

@ जोएल कॉर्नेट मुझे लगता है कि अनावश्यक गणनाओं को खत्म करने के लिए यह हमेशा अच्छा अभ्यास है चाहे कितना मामूली हो। – Matt

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