यह प्रश्न है, 189 लेटकोड पर सरणी घुमाएँ। यहां लिंक विवरण दर्ज करें इसका कथन है "किसी सरणी को देखते हुए, सरणी को दाईं ओर घुमाएं k कदम, जहां k गैर-ऋणात्मक है।" इसे बेहतर ढंग से समझने के लिए, यहां एक उदाहरण दिया गया है। छवि विवरण यहां दर्ज करें
तो, इसके लिए मेरा कोड है
for _ in range(k):
j = nums[-1]
nums.remove(nums[-1])
nums.insert(0, j)
यह इसमें कुछ परीक्षण मामलों को पास नहीं कर सकता है। चर्चा पैनल में, मुझे एक कोड मिला जिसमें दावा किया गया था कि यह सफलतापूर्वक सबमिट हो गया है जो इस प्रकार है
for _ in range(k):
nums.insert(0, nums.pop(-1))
मैं जानना चाहता हूं कि इन दोनों में क्या अंतर है और मेरा कोड कुछ परीक्षण मामलों को पास करने में सक्षम क्यों नहीं है।
5 जवाब
यदि आप इसे अजगर के खोल [].remove.__doc__
पर करते हैं, तो आप देखेंगे कि list.remove
का उद्देश्य है:
मूल्य की पहली घटना निकालें। यदि मान मौजूद नहीं है, तो ValueError बढ़ाता है।
आपके कोड में nums.remove(nums[-1])
अंतिम आइटम को नहीं हटाता है, लेकिन आपके अंतिम आइटम के मूल्य की पहली घटना को हटाता है।
उदा.
यदि आपके पास मूल्यों के साथ एक सूची है nums = [2, 4, 8, 3, 4]
और यदि आप nums.remove(nums[-1])
करते हैं तो nums
की सामग्री [2, 8, 3, 4]
बन जाती है [2, 4, 8, 3]
नहीं, जिसकी आप अपेक्षा कर रहे हैं।
.pop()
है (जो कि अधिक कुशल भी है; यह केवल अंतिम तत्व को पूरे list
को स्कैन किए बिना हटा देता है ताकि तत्व को हटाया जा सके remove
करता है)।
बस टुकड़ा करने का प्रयोग करें:
>>> def rotate(l, n):
... return l[-n:] + l[:-n]
...
>>> lst = [1, 2, 3, 4, 5, 6, 7]
>>> rotate(lst, 1)
[7, 1, 2, 3, 4, 5, 6]
>>> rotate(lst, 2)
[6, 7, 1, 2, 3, 4, 5]
>>> rotate(lst, 3)
[5, 6, 7, 1, 2, 3, 4]
cearv द्वारा दिया गया उत्तर अच्छा और सरल है, लेकिन बड़े सरणियों पर numpy निश्चित रूप से बेहतर प्रदर्शन करेगा। विचार करना:
np.roll(lst, n)
remove()
विधि एक एकल तत्व को तर्क के रूप में लेती है और सूची से इसकी पहली घटना को हटा देती है।
pop()
विधि एक एकल तर्क (सूचकांक) लेती है। विधि को दिया गया तर्क वैकल्पिक है। यदि पारित नहीं किया गया है, तो डिफ़ॉल्ट अनुक्रमणिका -1 को तर्क (अंतिम आइटम की अनुक्रमणिका) के रूप में पारित किया जाता है।
यदि टेस्ट केस में अंतिम इंडेक्स से पहले एक ही आइटम है तो टेस्ट केस विफल हो जाएगा।
इसलिए अपने कोड को सही करने के लिए remove
को pop
से बदलें
for _ in range(k):
poppedElement = nums.pop()
nums.insert(0, poppedElement)
या इसे और भी संक्षिप्त बनाने के लिए -
for _ in range(k):
nums.insert(0, nums.pop())
आपके कोड में j = nums [-1] और आप डालने की कोशिश कर रहे हैं (0, nums [-1])।
में
for _ in range(k):
nums.insert(0, nums.pop(-1))
अन्य नंबर डालने - (0, nums.pop(-1))
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।
nums.remove(nums[-1])
का मतलब यह नहीं है कि आप क्या सोचते हैं इसका मतलब है।