2011-06-25 8 views
5

पाइथन में डिफ़ॉल्ट split विधि लगातार एक स्थान के रूप में लगातार रिक्त स्थान का इलाज करती है। लेकिन अगर आप एक सीमांकक स्ट्रिंग निर्दिष्ट, लगातार परिसीमकों नहीं ढह हैं:पायथन लगातार डिलीमीटर

>>> 'aaa'.split('a') 
['', '', '', ''] 

लगातार परिसीमकों संक्षिप्त करने के लिए सबसे सरल तरीका क्या है? मुझे पता है कि मैं परिणाम सूची से खाली तारों को हटा सकता हूं:

>>> result = 'aaa'.split('a') 
>>> result 
['', '', '', ''] 
>>> result = [item for item in result if item] 

लेकिन क्या कोई और सुविधाजनक तरीका है?

+0

ऐसा लगता है कि आप इसे 're.split' –

+1

के साथ पूरा कर सकते हैं दिलचस्प! मुझे 'स्प्लिट()' का एहसास नहीं हुआ क्योंकि किसी भी तर्क ने ऐसा कुछ नहीं किया जिसे तर्क के साथ 'विभाजन' द्वारा दोहराया नहीं जा सका। – weronika

उत्तर

7

आप के रूप में परिसीमक के रूप में रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं: the docs से

re.split(pattern, string[, maxsplit=0, flags=0]) 

2

आप रेगुलर एक्सप्रेशन का इस्तेमाल कर सकते हैं:

re.split(pattern, string[, maxsplit=0, flags=0]) 

रूप

re.split('a+', 'aaa') 
+0

[पायथन का रेगेक्स वाक्यविन्यास] (http://docs.python.org/library/re.html#regular-expression-syntax), यदि आवश्यक हो। –

0

नहीं, कोई और सुविधाजनक तरीका नहीं है। या तो आप अपना खुद का विभाजन समारोह लिखते हैं, या खाली तारों को हटाते हैं।

लेकिन आपका समाधान बहुत स्पष्ट और पायथनिक लगता है।

0

हालांकि यह आप के लिए, आप एक set का उपयोग करके सभी गैर-अद्वितीय टोकन से छुटकारा पा सकते कि वास्तव में क्या नहीं कहा गया है:

>>> result 
['', '', ''] 
>>> set(result) 
set(['']) 
10

इस बारे में के रूप में संक्षिप्त है के रूप में आप प्राप्त कर सकते हैं:

string = 'aaa' 
result = [s for s in string.split('a') if s] 

या आप नियमित अभिव्यक्ति के लिए स्विच कर सकते हैं:

string = 'aaa' 
result = re.split('a+', string) 
+0

@anonymous downvote: समझाने की देखभाल? – orlp

+0

ग्रेट सॉल्यूशन! पैटर्न 'ए +' जितना संभव हो सके लगातार 'ए' द्वारा विभाजित होगा। इस प्रकार, 're.split ('a +', स्ट्रिंग) चलाकर' यह '[' ',' ']' वापस आ जाएगा। कहें कि 'स्ट्रिंग =' बाका 'तो यह' ['b', 'c'] 'वापस आ जाएगा। – DomingoR

1

मुझे लगता है कि अपने समाधान पे है ठीक है ठीक है। यहां एक समकक्ष है:

filter(bool, 'aaa'.split('a')) 

शायद सूची समझ के रूप में स्पष्ट नहीं है।

+1

क्षमा करें, लेकिन यह समाधान बहुत खराब है। इसके अलावा, python3 में फ़िल्टर बदल गया है और उसी परिणाम नहीं होंगे –

+0

क्या आप यह बता सकते हैं कि यह क्यों बुरा है (इसके अलावा इसके व्यवहार को अजगर 3 में बदल दिया गया है जिसे मैं नहीं जानता था)? – jena

+0

क्योंकि आप बूल (ओवरहेड) पर फ़ंक्शन कॉल जोड़ रहे हैं और इसे कम पठनीय बनाते हैं। –

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