2010-08-18 16 views
38

मुझे लगता है कि अजगर 3 में मैं ऐसा करने में सक्षम हो जाएगा:एक सूची को पहले और आराम में विभाजित करने के लिए पाइथोनिक तरीका?

first, *rest = l 

जो वास्तव में मैं क्या चाहते है, लेकिन मैं 2.6 उपयोग कर रहा हूँ। अभी के लिए मैं कर रहा हूँ:

first = l[0] 
rest = l[1:] 

यह ठीक है, लेकिन मैं तो बस हो, तो और अधिक सुरुचिपूर्ण कुछ सोच रहा था।

+6

मुझे लगता है कि इसके बाद के संस्करण ठीक है। आप हमेशा 'पहले, आराम = एल [0], एल [1:] 'कर सकते हैं। – katrielalex

+4

दरअसल, आप उपरोक्त में सुधार नहीं कर सकते - http://www.python.org/dev/peps/pep-3132/। – katrielalex

+1

संबंधित: https://stackoverflow.com/questions/10532473/python-head-and-tail-in-one-line –

उत्तर

29
first, rest = l[0], l[1:] 

मूल रूप से वही, सिवाय इसके कि यह एक ऑनलाइनर है। टुपल आक्रमण चट्टानों।

यह थोड़ा अधिक समय और कम स्पष्ट है, लेकिन सामान्यीकृत सभी iterables के लिए (बजाय sliceables के लिए प्रतिबंधित किया जा रहा है) है:

i = iter(l) 
first = next(i) # i.next() in older versions 
rest = list(i) 
+4

बेहतर है: 'पहला, अंतिम = एल [: 1], एल [1:] 'में मामला 'एल' खाली है (और यह सुंदर है;)। –

+4

का उल्लेख करना चाहिए कि ये अर्थात् समान नहीं हैं: 'एल [: 1] 'एक सूची है,' एल [0]' सूची का एक तत्व है। –

12

आप

first = l.pop(0) 

कर सकते हैं और फिर l हो जाएगा आराम। यह आपकी मूल सूची को संशोधित करता है, हालांकि, शायद यह वही नहीं है जो आप चाहते हैं।

+2

हे! मुझे नहीं पता था कि आप पॉप करने के लिए एक सूचकांक की आपूर्ति कर सकते हैं। यह असामान्य है, लेकिन आसान है! मैं सोच रहा था कि सूचियों पर कोई शिफ्ट विधि क्यों नहीं है। धन्यवाद! – Shawn

+0

यह खाली सूचियों के लिए काम नहीं करेगा: '' x = []; x.pop (0) Traceback (सबसे हाल कॉल पिछले): फ़ाइल "", लाइन 1, IndexError में: '' '' – avyfain

-2

मेरा सुझाव है:

first, remainder = l.split(None, maxsplit=1) 
+0

list' नहीं है खाली सूची से पॉप एक '.split() विधि – cpburnz

+0

ओउप्स! मेरी गलती, हालांकि यह एक स्ट्रिंग के लिए था – FGH

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

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