मैं कुछ पायथन कोड का विश्लेषण कर रहा हूं और मुझे नहीं पता कि क्या है
pop = population[:]
माध्यम। क्या यह जावा में सरणी सूचियों की तरह है या द्वि-आयामी सरणी की तरह है?
मैं कुछ पायथन कोड का विश्लेषण कर रहा हूं और मुझे नहीं पता कि क्या है
pop = population[:]
माध्यम। क्या यह जावा में सरणी सूचियों की तरह है या द्वि-आयामी सरणी की तरह है?
जवाबों:
यह स्लाइस अंकन का एक उदाहरण है, और यह क्या करता है के प्रकार पर निर्भर करता है population
। यदि population
एक सूची है, तो यह रेखा सूची की उथली प्रति बनाएगी । एक प्रकार की वस्तु tuple
या ए के लिए str
, यह कुछ भी नहीं करेगा (लाइन बिना ऐसा ही करेगा [:]
), और एक (कहना) न्यूम्पी सरणी के लिए, यह उसी डेटा के लिए एक नया दृश्य बनाएगा।
l.copy()
अधिक पठनीय है, लेकिन यह काम नहीं करेगा।
list(l)
हमेशा काम करता है, अधिक पठनीय होता है, और कुछ के साथ एक प्रति भी वापस करने की गारंटी दी जाती हैnumpy.array
list.clear()
। हालांकि, कुछ समय लगेगा, जब तक कि इससे एसओ पर इस तरह के प्रश्नों की महत्वपूर्ण कमी नहीं होगी। :)
A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)]
, मैं लगभग हमेशा पसंद करता हूँ numpy.rollaxis(A, axis, 0)[k]
। सामान्य तौर पर, मैं शायद ही कभी एक उपयोग के मामले में आया हूं जहां आपको सीधे slice()
ऑब्जेक्ट बनाने की आवश्यकता होगी । यदि आप उन्हें किसी भी तरह की आवश्यकता है, तो NumPy s_
उन्हें बनाने के लिए वैकल्पिक तरीके के रूप में सहायक प्रदान करता है।
यह जानने में भी मदद मिल सकती है कि सामान्य रूप से सूची का टुकड़ा सूची के भाग की प्रतिलिपि बनाता है। उदाहरण के population[2:4]
लिए जनसंख्या [2] और जनसंख्या [3] (स्लाइसिंग राइट-एक्सक्लूसिव) वाली सूची वापस आ जाएगी। बाएं और दाएं सूचकांक को छोड़कर, जैसे population[:]
वे क्रमशः 0 और लंबाई (जनसंख्या) के लिए डिफ़ॉल्ट होते हैं, जिससे पूरी सूची का चयन होता है। इसलिए सूची की एक प्रति बनाने के लिए यह एक सामान्य मुहावरा है।
अच्छा ... यह वास्तव में संदर्भ पर निर्भर करता है। अंततः, यह एक गुजरता slice
वस्तु ( slice(None,None,None)
: निम्न विधियों में से एक के लिए) __getitem__
, __setitem__
या __delitem__
। (वास्तव में, यदि वस्तु में ए है __getslice__
, जिसका उपयोग इसके बजाय किया जाएगा __getitem__
, लेकिन वह अब हटा दिया गया है और इसका उपयोग नहीं किया जाना चाहिए)।
ऑब्जेक्ट वे कर सकते हैं जो वे स्लाइस के साथ चाहते हैं।
के संदर्भ में:
x = obj[:]
इसमें पास obj.__getitem__
की गई स्लाइस ऑब्जेक्ट के साथ कॉल होगी । वास्तव में, यह पूरी तरह से इसके बराबर है:
x = obj[slice(None,None,None)]
(हालांकि पूर्व शायद अधिक कुशल है क्योंकि इसमें slice
कंस्ट्रक्टर को देखना नहीं है - यह सब बायटेकोड में किया गया है)।
अधिकांश वस्तुओं के लिए, यह अनुक्रम के एक हिस्से की उथली प्रतिलिपि बनाने का एक तरीका है।
आगे:
x[:] = obj
के __setitem__
आधार पर आइटम सेट करने का एक तरीका है (इसे कॉल करता है ) obj
।
और, मुझे लगता है कि आप शायद अनुमान लगा सकते हैं:
del x[:]
कॉल ;-)
आप विभिन्न स्लाइस भी पास कर सकते हैं:
x[1:4]
निर्माणों slice(1,4,None)
x[::-1]
निर्माण slice(None,None,-1)
और आगे। आगे पढ़े: पायथन के स्लाइस अंकन के बारे में बताएं
यह अनुक्रम की शुरुआत से अंत तक एक टुकड़ा है, आमतौर पर एक उथले प्रतिलिपि का उत्पादन होता है।
(ठीक है, यह इससे कहीं अधिक है , लेकिन आपको अभी तक देखभाल करने की आवश्यकता नहीं है।)
यह सूची की एक प्रति बनाता है, बनाम पहले से मौजूद सूची के लिए सिर्फ एक नया नाम निर्दिष्ट करता है।
[:]
सरणी में हैमिटर या स्लाइसिंग के लिए उपयोग किया जाता है, हैश
जैसे:
[१: ५] १ समावेशी और ५ अनन्य यानी १-४ के बीच मान प्रदर्शित करने के लिए
[शुरू: अंत]
मूल रूप से स्लाइसिंग के लिए सरणी में उपयोग किया जाता है, समझें ब्रैकेट को वेरिएबल स्वीकार करें मान या प्रदर्शित करने के लिए कुंजी, और ":" का उपयोग संपूर्ण सरणी को पैकेट में सीमित या स्लाइस करने के लिए किया जाता है।
a[1:5]
तत्व 1-4 देता है, 2-4 नहीं।