यहाँ पर विचार करने के लिए दो मुख्य बिंदु हैं:
- परिणाम के
'/segment/segment/'.split('/')
बराबर होने की उम्मीद करना ['segment', 'segment']
उचित है, लेकिन फिर यह जानकारी खो देता है। यदि split()
आप चाहते हैं कि जिस तरह से काम किया है, अगर मैं आपको बताता हूं कि a.split('/') == ['segment', 'segment']
, आप मुझे नहीं बता सकते कि क्या a
था।
- परिणाम क्या होना
'a//b'.split()
चाहिए? ['a', 'b']
? या ['a', '', 'b']
? यानी, split()
आसन्न सीमांकक का विलय करना चाहिए ? यदि यह होना चाहिए, तो एक चरित्र द्वारा सीमांकित डेटा को पार्स करना बहुत कठिन होगा, और कुछ फ़ील्ड खाली हो सकते हैं। मुझे यकीन है कि वहाँ कई लोग हैं जो कर रहे हैं काफी हूँ कर उपरोक्त मामले के लिए परिणाम में खाली मान चाहते हैं!
अंत में, यह दो चीजों को उबालता है:
संगति: यदि मेरे पास n
सीमांकक है, तो a
, मुझे n+1
मान वापस मिलता हैsplit()
।
जटिल चीजों को करना संभव है, और सरल चीजों को करना आसान है: यदि आप इसके परिणामस्वरूप खाली तारों को अनदेखा करना चाहते हैं split()
, तो आप हमेशा ऐसा कर सकते हैं:
def mysplit(s, delim=None):
return [x for x in s.split(delim) if x]
लेकिन अगर कोई खाली मूल्यों को नजरअंदाज नहीं करना चाहता है, तो उसे करना चाहिए उसे सक्षम ।
भाषा की एक-एक परिभाषा split()
चुननी होती है- डिफ़ॉल्ट के रूप में हर किसी की आवश्यकता को पूरा करने के लिए कई अलग-अलग उपयोग के मामले हैं। मुझे लगता है कि पायथन की पसंद एक अच्छी है, और सबसे तार्किक है। (एक तरफ के रूप में, एक कारण मुझे C पसंद नहीं हैstrtok()
है क्योंकि यह आसन्न सीमांकक को विलीन कर देता है, जिससे इसके साथ गंभीर पार्सिंग / टोकन करना बहुत कठिन हो जाता है।)
एक अपवाद है: a.split()
एक तर्क के बिना लगातार सफेद-स्थान को निचोड़ता है, लेकिन कोई यह तर्क दे सकता है कि उस मामले में ऐसा करना सही है। यदि आप व्यवहार नहीं चाहते हैं, तो आप हमेशा कर सकते हैं a.split(' ')
।