बिल्ट-इन फ़ंक्शन slice
का उपयोग क्या है और मैं इसका उपयोग कैसे कर सकता हूं?
पायथनिक स्लाइसिंग का सीधा तरीका मुझे पता है - l1[start:stop:step]
। मैं जानना चाहता हूं कि मेरे पास स्लाइस ऑब्जेक्ट है, तो मैं इसका उपयोग कैसे करूं?पाइथन स्लाइस कैसे करें, मुझे पाइथन स्लाइस पता है लेकिन मैं इसके लिए अंतर्निहित स्लाइस ऑब्जेक्ट का उपयोग कैसे कर सकता हूं?
उत्तर
आप एक ही क्षेत्रों के साथ टुकड़ा को फोन करके एक टुकड़ा बनाने यदि कर आप का प्रयोग करेंगे [शुरू: अंत: कदम] अंकन:
sl = slice(0,4)
टुकड़ा का उपयोग करने के लिए, बस इसे पारित जैसे कि यह सूचकांक थे एक सूची या स्ट्रिंग में:
>>> s = "ABCDEFGHIJKL"
>>> sl = slice(0,4)
>>> print(s[sl])
'ABCD'
मान लें कि आपके पास निश्चित-लंबाई वाले टेक्स्ट फ़ील्ड की एक फ़ाइल है। आप इस फ़ाइल में प्रत्येक "रिकॉर्ड" से मूल्यों को आसानी से निकालने के लिए स्लाइस की एक सूची परिभाषित कर सकते हैं।
data = """\
0010GEORGE JETSON 12345 SPACESHIP ST HOUSTON TX
0020WILE E COYOTE 312 ACME BLVD TUCSON AZ
0030FRED FLINTSTONE 246 GRANITE LANE BEDROCK CA
0040JONNY QUEST 31416 SCIENCE AVE PALO ALTO CA""".splitlines()
fieldslices = [slice(*fielddef) for fielddef in [
(0,4), (4, 21), (21,42), (42,56), (56,58),
]]
fields = "id name address city state".split()
for rec in data:
for field,sl in zip(fields, fieldslices):
print("{} : {}".format(field, rec[sl]))
print('')
प्रिंटों:
id : 0010
name : GEORGE JETSON
address : 12345 SPACESHIP ST
city : HOUSTON
state : TX
id : 0020
name : WILE E COYOTE
address : 312 ACME BLVD
city : TUCSON
state : AZ
id : 0030
name : FRED FLINTSTONE
address : 246 GRANITE LANE
city : BEDROCK
state : CA
id : 0040
name : JONNY QUEST
address : 31416 SCIENCE AVE
city : PALO ALTO
state : CA
slice
फ़ंक्शन slice objects देता है। स्लाइस ऑब्जेक्ट्स पाइथन के आंतरिक प्रकारों में से एक हैं, जिन्हें पढ़ने के प्रदर्शन के लिए अनुकूलित किया गया है - उनके सभी गुण केवल पढ़ने के लिए हैं।
slice
बदलना डिफ़ॉल्ट व्यवहार को बदलना चाहते हैं तो उपयोगी हो सकता है। उदाहरण के लिए, lxml
डोम तत्वों तक पहुंचने के लिए स्लाइस नोटेशन का उपयोग करता है (हालांकि, मैंने पुष्टि नहीं की है कि उन्होंने स्वयं को कैसे किया है)।
स्क्वायर एक अनुक्रम के बाद कोष्ठक या तो अनुक्रमण या टुकड़ा करने की क्रिया को निरूपित क्या कोष्ठक के अंदर के आधार पर:
>>> "Python rocks"[1] # index
'y'
>>> "Python rocks"[1:10:2] # slice
'yhnrc'
इन मामलों में से
दोनों __getitem__()
विधि द्वारा नियंत्रित किया जाता है अनुक्रम (या __setitem__()
यदि बराबर चिह्न के बाईं ओर है।) सूचकांक या टुकड़ा विधिओं को एक तर्क के रूप में पारित किया जाता है, और टी वह जिस तरह से पाइथन करता है वह स्लाइस नोटेशन को परिवर्तित कर रहा है, (1:10:2
, इस मामले में) एक स्लाइस ऑब्जेक्ट में: slice(1,10,2)
।
तो अगर आप अपने खुद के अनुक्रम की तरह वर्ग को परिभाषित कर रहे हैं या किसी अन्य वर्ग के __getitem__
या __setitem__
या __delitem__
तरीकों अधिभावी, आप अगर यह एक int
या एक slice
, और इस प्रक्रिया के हिसाब से है निर्धारित करने के लिए सूचकांक तर्क का परीक्षण करने की जरूरत है: start
, stop
और step
, और एक विधि:
def __getitem__(self, index):
if isinstance(index, int):
... # process index as an integer
elif isinstance(index, slice):
start, stop, step = index.indices(len(self)) # index is a slice
... # process slice
else:
raise TypeError("index must be int or slice")
एक slice
वस्तु तीन गुण होते हैं indices
है, जो एक भी तर्क, वस्तु की लंबाई लेता है, और एक 3-टपल देता है: (start, stop, step)
।
>>> class sl:
... def __getitem__(self, *keys): print keys
...
>>> s = sl()
>>> s[1:3:5]
(slice(1, 3, 5),)
>>> s[1:2:3, 1, 4:5]
((slice(1, 2, 3), 1, slice(4, 5, None)),)
>>>
यह क्यों होता है पर स्पष्टीकरण के लिए नीचे डॉन का उत्तर देखें। – abc
यह भी कहना फायदेमंद होगा कि '__getitem__' में कई स्लाइस पास किए जा सकते हैं: 's: 1: 2: 3, 1, 4: 5] => (टुकड़ा (1, 2, 3), 1 , टुकड़ा (4, 5, कोई नहीं)) '। – OozeMeister
- 1. मैं सूची स्लाइस को अपडेट क्यों कर सकता हूं लेकिन पायथन में स्ट्रिंग स्लाइस नहीं?
- 2. पाइथन स्लाइस सूची में पहला और अंतिम तत्व स्लाइस
- 3. स्ट्रिंग स्लाइस
- 4. स्ट्रक्चर सरणी कैसे स्लाइस करें?
- 5. जावा में स्लाइस स्ट्रिंग
- 6. सूचकांक और स्लाइस अजगर
- 7. itertools.islice सूची स्लाइस
- 8. नई आईओएस 6 आर्किटेक्चर त्रुटि: फ़ाइल सार्वभौमिक (3 स्लाइस) है लेकिन इसमें (एन) arm7vs स्लाइस
- 9. स्कैला में स्लाइस नोटेशन?
- 10. अजगर रैंडम स्लाइस मुहावरा
- 11. मैं दो [] बाइट स्लाइस या सरणी के साथ गो एपेंड का उपयोग कैसे कर सकता हूं?
- 12. संदर्भ द्वारा अपरिवर्तनीय तारों के स्लाइस और
- 13. अजगर/Numpy - लपेटें स्लाइस सरणी
- 14. पायथन स्ट्रिंग स्लाइस इंडेक्स - स्ट्रिंग
- 15. मैं प्रत्येक 3 सूचकांक को एक स्ट्रिंग कैसे स्लाइस करूं?
- 16. d2: बताए पर्वतमाला/iterators सरणी स्लाइस
- 17. पायथन: अंतराल के साथ स्लाइस के लिए छोटा वाक्यविन्यास?
- 18. Array.slice और Array() के बीच अंतर। स्लाइस
- 19. रेल स्लाइस में समय स्लाइस (योग, औसत, न्यूनतम, अधिकतम, आदि) द्वारा कुल डेटा कैसे प्राप्त करें 3
- 20. गोलांग एचटीएमएल/टेम्पलेट: स्लाइस तत्व को कैसे इंडेक्स करना है?
- 21. फ़ंक्शन हैश से फिस हैश स्लाइस फ़ंक्शन
- 22. रूबी स्ट्रिंग स्लाइस इंडेक्स: str [n..infinity]
- 23. राउंड रॉबिन टाइम शेड्यूलिंग में समय स्लाइस
- 24. किसी भी तर्क के साथ जावास्क्रिप्ट स्लाइस() विधि का उपयोग
- 25. जांचें कि क्या स्ट्रिंग स्लाइस में गो
- 26. जेकप्लॉट पाई चार्ट - बदलें पाई स्लाइस रंग
- 27. गो में स्लाइस प्रकार का बिंदु क्या है?
- 28. सरणी के अंत से स्लाइस एनएसएआरएआर
- 29. गो लैंग सरणी और स्लाइस डेटा प्रकार
- 30. रूबी में स्लाइस फ़ंक्शन का कोई विपरीत कार्य है?
यह मेरे लिए काम करता था। डीफ __slice __ (स्वयं, प्रारंभ = कोई नहीं, अंत = कोई नहीं, चरण = कोई नहीं): वापस self.obj [स्लाइस (प्रारंभ, अंत, चरण)] – user2290820