दिलचस्प पोस्ट
उदाहरण के लिए स्विच करें? "निष्पादन के आसपास" मुहावरे क्या है? ओरेकल SQL में तिथियों की तुलना करना पृष्ठभूमि का रंग मुद्रण पूर्वावलोकन में नहीं दिखा रहा है सर्वलेट आधारित वेब अनुप्रयोग में पृष्ठभूमि कार्य कैसे चलाना है? अग्रणी अंडरस्कोर के साथ आईओएस में संश्लेषित गुणों का नाम क्यों बदलें? एएसपी.नेट एमवीसी में अलग-अलग विधानसभाओं में दृश्य पायथन पुनः। एफंडॉल अजीब व्यवहार करता है JFrame स्थानों को स्थापित करने के लिए सर्वश्रेष्ठ अभ्यास स्थानांतरित वस्तु से मैं क्या कर सकता हूं? एंड्रॉइड पर एक सूचीईव्यू कैसे गतिशील रूप से अद्यतन करें लॉक-डाउन iPhone / iPod / iPad इसलिए यह केवल एक ऐप चला सकता है AngularJS – UI- राउटर – डायनेमिक दृश्य को कॉन्फ़िगर कैसे करें I पृष्ठभूमि छवि आईओएस / एंड्रॉइड / मोबाइल क्रोम को छिपाते समय पता चलता है एंड्रॉइड में एक स्ट्रिंग और सबस्क्रिप्ट

हर एनथिल वर्ण स्ट्रिप विभाजित?

संभव डुप्लिकेट:
विखंडों में एक सूची पर पुनरावृत्त करने के लिए सबसे "अजगर" तरीका क्या है?

क्या एक अजगर स्ट्रिंग को प्रत्येक एनथ चरित्र विभाजित करना संभव है?

उदाहरण के लिए, मान लीजिए मेरे पास स्ट्रिंग है जिसमें निम्नलिखित है:

'1234567890' 

मैं इसे कैसे देखना चाहता हूं:

 ['12','34','56','78','90'] 

वेब के समाधान से एकत्रित समाधान "हर एनथिल वर्ण स्ट्रिप विभाजित?"

 >>> line = '1234567890' >>> n = 2 >>> [line[i:i+n] for i in range(0, len(line), n)] ['12', '34', '56', '78', '90'] 

बस पूरा होने के लिए, आप यह एक regex के साथ कर सकते हैं:

 >>> import re >>> re.findall('..','1234567890') ['12', '34', '56', '78', '90'] 

जैसा कि टिप्पणी में बताया गया है, आप यह कर सकते हैं:

 >>> import re >>> re.findall('..?', '123456789') ['12', '34', '56', '78', '9'] 

लंबी अवधि के लिए regex को सरल बनाने के लिए आप निम्न कार्य भी कर सकते हैं:

 >>> import re >>> re.findall('.{1,2}', '123456789') ['12', '34', '56', '78', '9'] 

और आप re.finditer उपयोग कर सकते हैं यदि स्ट्रिंग re.finditer द्वारा हिस्सा उत्पन्न करने के लिए लंबा है।

एन-लम्बे समूहों में तत्वों को समूहित करने का एक और आम तरीका:

 >>> s = '1234567890' >>> map(''.join, zip(*[iter(s)]*2)) ['12', '34', '56', '78', '90'] 

यह विधि zip() लिए डॉक्स से सीधे आती है

मुझे लगता है कि यह छोटा और अधिक itertools संस्करण से पठनीय है:

 def split_by_n( seq, n ): """A generator to divide a sequence into chunks of n units.""" while seq: yield seq[:n] seq = seq[n:] print list(split_by_n("1234567890",2)) 

मुझे यह समाधान पसंद है:

 s = '1234567890' o = [] while s: o.append(s[:2]) s = s[2:] 

लैम्ब्डा का उपयोग करना:

 split_string = lambda x, n: [x[i:i+n] for i in range(0, len(x), n)] s = '1234567890' split_string(s,2) ['12', '34', '56', '78', '90'] 

यहां मेरा समाधान है:

 def split_every(n, s): return [ s[i:i+n] for i in xrange(0, len(s), n) ] print split_every(2, "1234567890") 

PyPI से अधिक- आईटेरोलॉल्स का उपयोग करना:

 >>> from more_itertools import sliced >>> list(sliced('1234567890', 2)) ['12', '34', '56', '78', '90'] 

itertools उपयोग करें पुस्तिका के "व्यंजन विधि" अनुभाग इस प्रकार कार्य करने के लिए एक फ़ंक्शन प्रदान करता है:

 def grouper(iterable, n, fillvalue=None): "Collect data into fixed-length chunks or blocks" # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx args = [iter(iterable)] * n return izip_longest(fillvalue=fillvalue, *args) 
 >>> from functools import reduce >>> from operator import add >>> from itertools import izip >>> x = iter('1234567890') >>> [reduce(add, tup) for tup in izip(x, x)] ['12', '34', '56', '78', '90'] >>> x = iter('1234567890') >>> [reduce(add, tup) for tup in izip(x, x, x)] ['123', '456', '789'] 

निम्न कोड आज़माएं:

 from itertools import islice def split_every(n, iterable): i = iter(iterable) piece = list(islice(i, n)) while piece: yield piece piece = list(islice(i, n)) s = '1234567890' print list(split_every(2, list(s))) 

हमेशा की तरह, जो एक लाइनर से प्यार करते हैं

 n = 2 line = "this is a line split into n characters" line = [line[i * n:i * n+n] for i,blah in enumerate(line[::n])] 

डरावना एक – एक और जवाब का आविष्कार करने की कोशिश की:

 def split(s, chunk_size): a = zip(*[s[i::chunk_size] for i in range(chunk_size)]) return [''.join(t) for t in a] print(split('1234567890', 1)) print(split('1234567890', 2)) print(split('1234567890', 3)) 

बाहर

 ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] ['12', '34', '56', '78', '90'] ['123', '456', '789'] 

मुझे यह कोड मिल गया है जिसका उपयोग मैं जब भी कर सकता हूं:

 def split_string(n, st): lst = [""] for i in str(st): l = len(lst) - 1 if len(lst[l]) < n: lst[l] += i else: lst += [i] return lst print(split_string(3, "test_string.")) 

कहा पे:

  • n प्रत्येक सूची आइटम की लंबाई है
  • st को विभाजित होने की स्ट्रिंग है
  • lst st का सूची संस्करण है
  • i st में इस्तेमाल किया जा रहा वर्तमान चरित्र है
  • l अंतिम सूची आइटम की लंबाई है

यहां एक और सामान्य मामले के लिए दूसरा समाधान है जहां खंड समान लंबाई के नहीं हैं। यदि लम्बाई 0 है, तो बाकी शेष भाग लौटा दिया गया है।

data विभाजित होने का अनुक्रम है; fieldsize फ़ील्ड लंबाई की सूची के साथ एक ट्यूपल है

 def fieldsplit(data=None, fieldsize=()): tmpl=[]; for pp in fieldsize: if(pp>0): tmpl.append(line[:pp]); line=line[pp:]; else: tmpl.append(line); break; return tuple(tmpl); 

मैं इसका उपयोग कर रहा हूं:

list(''.join(s) for s in zip(my_str[::2], my_str[1::2]))

या आप 2 बजाय किसी भी अन्य n नंबर का उपयोग कर सकते हैं