यह प्रश्न है, 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))

मैं जानना चाहता हूं कि इन दोनों में क्या अंतर है और मेरा कोड कुछ परीक्षण मामलों को पास करने में सक्षम क्यों नहीं है।

1
Vanshita Rohela 16 जिंदा 2022, 16:09
nums.remove(nums[-1]) का मतलब यह नहीं है कि आप क्या सोचते हैं इसका मतलब है।
 – 
user2357112 supports Monica
16 जिंदा 2022, 16:10

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] नहीं, जिसकी आप अपेक्षा कर रहे हैं।

2
Alexander Suraphel 16 जिंदा 2022, 16:15
आप यह उल्लेख करना चाह सकते हैं कि यहां उपयोग करने की सही विधि सिर्फ .pop() है (जो कि अधिक कुशल भी है; यह केवल अंतिम तत्व को पूरे list को स्कैन किए बिना हटा देता है ताकि तत्व को हटाया जा सके remove करता है)।
 – 
ShadowRanger
16 जिंदा 2022, 16:28
ओपी ने पहले ही सही समाधान खोज लिया है। सवाल मूल रूप से है "मैं जानना चाहता हूं कि इन दोनों में क्या अंतर है और मेरा कोड कुछ परीक्षण मामलों को पास करने में सक्षम क्यों नहीं है।"।
 – 
Alexander Suraphel
16 जिंदा 2022, 16:58

बस टुकड़ा करने का प्रयोग करें:

>>> 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]
1
cesarv 16 जिंदा 2022, 16:20

cearv द्वारा दिया गया उत्तर अच्छा और सरल है, लेकिन बड़े सरणियों पर numpy निश्चित रूप से बेहतर प्रदर्शन करेगा। विचार करना:

np.roll(lst, n)
1
rikyeah 16 जिंदा 2022, 16:24

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())
0
Rajarshi Ghosh 16 जिंदा 2022, 16:40

आपके कोड में j = nums [-1] और आप डालने की कोशिश कर रहे हैं (0, nums [-1])।

में

for _ in  range(k):
   nums.insert(0, nums.pop(-1))

अन्य नंबर डालने - (0, nums.pop(-1))

0
qazwsxedc 16 जिंदा 2022, 16:21