2011-09-11 11 views
18

पर सूची तत्वों को सम्मिलित करती है, मैं सूची extend फ़ंक्शन के संस्करण को लागू करने के लिए सबसे अधिक पाइथोनिक तरीका ढूंढ रहा हूं, जहां यह अंत के बजाय किसी दिए गए इंडेक्स तक फैली हुई है सूची।सूची इंडेक्स में विस्तारित करती है, न केवल

a_list = [ "I", "rad", "list" ]              
b_list = [ "am", "a" ] 
a_list.my_extend(b_list, 1) # insert the items from b_list into a_list at index 1 

print(a_list) # would output: ['I', 'am', 'a', 'rad', 'list'] 

क्या कोई नई सूची बनाने के बिना ऐसा करने का कोई तरीका है?

a_list = [ "I", "rad", "list" ] 
b_list = [ "am", "a" ] 
c_list = [] 

c_list.extend(a_list[:1]) 
c_list.extend(b_list ) 
c_list.extend(a_list[1:]) 

print(c_list) # outputs: ['I', 'am', 'a', 'rad', 'list'] 

यह दृष्टिकोण वास्तव में इतना बुरा नहीं है, लेकिन मेरे पास एक झटका है जो आसान हो सकता है। यह हो सकता है?

+2

कोई नई सूची बनाने में कुछ भी गलत नहीं है, लेकिन आप इसे चरणों में क्यों कर रहे हैं? यह उससे कहीं अधिक सरल है: 'c_list = a_list [: 1] + b_list + a_list [1:]'। –

+0

मुझे नहीं पता था + सूचियों के लिए ओवरलोड किया गया था। – mwcz

+0

मुझे एक ही चीज़ की आवश्यकता थी, लेकिन इसके बजाय, पूछने के लिए, 'अनदेखा "सूची तत्वों को समान रूप से' विस्तारित 'सूची में जोड़ने के लिए' डालने 'के तरीके के लिए पूछने के लिए कहा जा रहा है ... उत्तर वही होगा :- डी – danicotra

उत्तर

41

ज़रूर, आप टुकड़ा अनुक्रमण का उपयोग कर सकते हैं:

a_list[1:1] = b_list 

बस, सामान्य कलन विधि का प्रदर्शन करने के लिए यदि आप एक काल्पनिक कस्टम list कक्षा में my_extend समारोह को लागू करने के लिए गए थे, तो वह ऐसा दिखेगा:

def my_extend(self, other_list, index): 
    self[index:index] = other_list 

लेकिन वास्तव में यह एक फ़ंक्शन नहीं बनाते हैं, जब आपको आवश्यकता हो तो स्लाइस नोटेशन का उपयोग करें।

+0

हां, मुझे पता था! मैंने कभी कोशिश नहीं की; मैंने अभी माना है कि यह 'b_list' के तत्वों के बजाय, संपूर्ण' b_list' को 'a_list' में इंडेक्स 1 पर रखेगा। मुझे स्पष्ट रूप से स्लाइसिंग की जटिलताओं की समीक्षा करने की आवश्यकता है। बहुत धन्यवाद। – mwcz

+2

जबकि मुझे यह समाधान पसंद है, यह मुझे लगता है कि पाइथन सिद्धांतों के खिलाफ थोड़ा सा लगता है क्योंकि यह तुरंत स्पष्ट नहीं है कि क्या होने जा रहा है (आपकी गलती नहीं)। मेरी इच्छा है कि विस्तार के लिए वैकल्पिक तर्क था ... – Stan

+2

मुझे पता नहीं, मुझे लगता है कि नोटिस स्लाइस करने के लिए उपयोग करने के बाद यह पर्याप्त स्पष्ट है। उम्मीद है कि 'the_list [i: j] = other_list' 'i j' (जैसे 'the_list [5: 3] = other_list') के बारे में बात कर रहे थे तो मैं निश्चित रूप से सहमत होगा कि यह स्पष्ट रूप से स्पष्ट नहीं है कि क्या होना चाहिए, लेकिन मुझे नहीं लगता कि वास्तव में सिंटैक्स वैसे भी काम करता है। –

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