2009-03-25 18 views
7

मत समझो कि तुम एक अजगर सूची का अंतिम तत्व हैं: क्या मैंने सोचा था कि कोई अंतर नहीं थासूची [-1:] [0] और सूची [लेन (सूची) -1] के बीच क्या अंतर है?

myList[-1:][0] 

और

myList[len(myList)-1] 

के बीच अंतर है, लेकिन फिर मैं इस

>>> list = [0] 
>>> list[-1:][0] 
0 
>>> list[-1:][0] += 1 
>>> list 
[0] 
>>> list[len(list)-1] += 1 
>>> list 
[1] 
की कोशिश की

मैं थोड़ा आश्चर्यचकित था ...

+1

के बराबर सुनिश्चित नहीं हैं कि तुम क्यों 'लिख रहे हैं सूची है [0]'; लिखने का सामान्य तरीका सिर्फ 'सूची [-1] 'है। साथ ही, आप शायद अपनी सूची 'सूची' नाम देकर बिल्टिन' सूची() 'को छायांकन से बचना चाहते हैं। – kquinn

उत्तर

14

यदि आप उपयोग करते हैं टुकड़ा [-1:], लौटाई गई सूची एक उथली-प्रति है, संदर्भ नहीं। तो [-1:] [0] नई सूची को संशोधित करता है। [लेन (सूची) -1] अंतिम वस्तु का संदर्भ है।

9

list[-1:] एक नई सूची बनाता है। list[len(list)-1] के समान व्यवहार प्राप्त करने के लिए इसे किसी प्रकार के list का दृश्य वापस करना होगा, लेकिन जैसा कि मैंने कहा था, यह एक नई अस्थायी सूची बनाता है। फिर आप अस्थायी सूची को संपादित करने के लिए आगे बढ़ें।

वैसे भी, आप जानते हैं कि आप एक ही चीज़ के लिए list[-1] का उपयोग कर सकते हैं, है ना?

+0

उम ... सही ... मुझे पता था कि ... – c0m4

3

स्लाइसिंग प्रतिलिपि बनाता है (उथली प्रतिलिपि)। यह अक्सर एक उथले प्रतिलिपि idiom के रूप में प्रयोग किया जाता है। [-1:]

अर्थात

list2 = list1[:] 

import copy 
list2 = copy.copy(list1) 
+0

जो कॉपी का उपयोग करने से कम पठनीय/समझने योग्य लगता है ... क्या इसका कोई कारण है "इसका अक्सर उपयोग किया जाता है"? – tgray

+0

मैं मानता हूं कि यह कम पठनीय है। इसका उपयोग क्यों किया जाता है? मुझे लगता है, ऐसा इसलिए है क्योंकि इसे आयात की आवश्यकता नहीं है। – vartec

+0

क्या आपको लगता है कि वे आयात से परहेज कर रहे हैं क्योंकि यह कोड की एक और पंक्ति लेता है, या क्योंकि वे किसी प्रकार के ओवरहेड (मेमोरी, लोड-टाइम इत्यादि) से बचने की कोशिश कर रहे हैं? – tgray

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