2011-12-19 19 views
24

से अंतिम एक्स तत्वों को निकालने के लिए कैसे करें यदि एक पायथन सूची की लंबाई किसी दिए गए मान (10 कहें) से अधिक है, तो मैं उस सूची में पिछले 10 तत्वों को एक नई सूची में निकालना चाहता हूं। मैं यह कैसे कर सकता हूं? मैंने लेन (my_list) - 10 के बीच अंतर प्राप्त करने का प्रयास किया और इसे इस प्रकार उपयोग करें: new_list = [(len (my_list) - 10):] जोपायथन - सूची

कोई सुझाव नहीं है?

+0

"जो काम नहीं करता" वैध विफलता विवरण नहीं है। – hop

+2

संभव डुप्लिकेट [पायथन में सूची के अंतिम आइटम कैसे प्राप्त करें?] (Http://stackoverflow.com/questions/646644/how-to-get-last-items-of-a-list-in-python) –

उत्तर

59

यह बस के रूप में आसान है अग्रिम में धन्यवाद के रूप में:

my_list[-10:] 
+13

यह उल्लेख करना अभी भी महत्वपूर्ण है कि यदि प्रारंभिक सूची 10 तत्वों से कम है, तो यह समाधान अभी भी पूरी सूची प्रदान करने में काम करेगा। जैसे यदि 'my_list = [1,2,3]', तो 'my_list [-10:] '' [1,2,3] 'के बराबर है। – ovgolovin

10

अजगर ट्यूटोरियल एक वर्ग कैसे सूची टुकड़ा करने की क्रिया का उपयोग करने के होते हैं: http://docs.python.org/tutorial/introduction.html#lists

आपके मामले में, यह लिखित रूप में के रूप में सरल है:

new_list = my_list[-10:] 
12

इससे पता चलता है कि लंबी सूची को अधिकतम आकार में कैसे काट लें और बाकी को एक नई सूची में रखें। यह आप के बारे में पूछ रहा है नहीं वास्तव में क्या कर रहे हैं, लेकिन यह हो सकता है आप वास्तव में क्या चाहते हैं: अधिक तुम किस बारे में, एक ही पूछ रहे हैं मूल रूप से है, लेकिन अंत से नई सूची लेने के समान

>>> list1 = [10, 20, 30, 40, 50, 60, 70] 
>>> max_size = 5 
>>> list2 = list1[max_size:] 
>>> list2 
[60, 70] 
>>> list1 = list1[:max_size] 
>>> list1 
[10, 20, 30, 40, 50] 

यह वह जगह है:

>>> list1 = [10, 20, 30, 40, 50, 60, 70] 
>>> list2 = list1[:max_size] 
>>> list2 
[10, 20, 30, 40, 50] 
>>> list2 = list1[-max_size:] 
>>> list2 
[30, 40, 50, 60, 70] 
>>> list1 = list1[:-max_size] 
>>> list1 
[10, 20] 
>>> 
+0

पहले से ही दो अच्छे उत्तर थे, इसमें ज्यादा कुछ नहीं जोड़ा गया है। नीचे वोट के लिए खेद है। – Benjamin

+8

@ बेंजामिन: तथ्यों को अलग करना कि ए) एक वास्तविक इंटरैक्टिव उदाहरण बहुत उपयोगी हो सकता है और बी) मैंने अन्य उत्तरों को देखने से पहले इसका जवाब देना शुरू कर दिया है, आप स्टैक ओवरफ़्लो पर डाउनवॉटिंग के उद्देश्य को समझने में पूरी तरह असफल रहे हैं। बधाई हो और एक अच्छा दिन हो! – dkamins

+1

@ बेंजामिन: पी एस भविष्य के संदर्भ के लिए: "मुझे कब वोट देना चाहिए? जब भी आप एक गंभीर रूप से मैला, कोई प्रयास-व्यय पोस्ट नहीं करते हैं, या एक उत्तर जो स्पष्ट रूप से और शायद खतरनाक रूप से गलत है, तो अपने डाउनवॉट्स का उपयोग करें।" (http: // stackoverflow।कॉम/विशेषाधिकार/वोट-डाउन) – dkamins

5

वास्तव में, अपने प्रश्न के बयान में सबस्क्रिप्ट पूरी तरह से काम करता है - आप वास्तव में आप क्या त्रुटि या अप्रत्याशित परिणाम देख रहे हैं जब आप इसे अपने आप को का उपयोग कर की कोशिश में पेस्ट कर सकते हैं?

>>> my_list = list('abcdefghijklmnop') 
>>> new_list = my_list[(len(my_list) - 10):] 
>>> new_list 
['g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'] 

समस्या बस है कि आप अपने टुकड़ा अंकन के सामने my_list नाम देना भूल गए है: यहाँ सबस्क्रिप्ट सुझाव के सफल रन है?

संपादित करें: फेलिक्स नोटों रूप में, आप नकारात्मक जाने से सूचकांक रोकने चाहिए:

my_list[max(0, len(my_list) - 10):] 

और, ज़ाहिर है, के रूप में अन्य उत्तर ध्यान दें, एक निरंतर नकारात्मक सूचकांक वास्तव में सबसे आसान तरीका है पूरा करने के लिए है आपका लक्ष्य; लेकिन मैं पहली बार ध्यान केंद्रित करना चाहता था कि पिछले दस तत्वों को प्राप्त करने का आपका "स्वयं का तरीका" - जो समझ में आया, भले ही उसने स्लाइस के बारे में पाइथन के सम्मेलनों का पूर्ण लाभ नहीं लिया - इसके बजाय आपको एक त्रुटि दे रही थी।

+3

जब उसकी सूची की लंबाई <10. –

+0

ओह, आप सही हैं। मैं सिर्फ my_list भूल गया हूं :( – sura

+0

@ फ़ेलिक्सयान - आप सही हैं, मैं इसे ठीक कर दूंगा! –

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