पायथन में, मैं किसी सूची में एक आइटम को एक निश्चित सूचकांक में कैसे स्थानांतरित करूं?
पायथन में, मैं किसी सूची में एक आइटम को एक निश्चित सूचकांक में कैसे स्थानांतरित करूं?
जवाबों:
insert
किसी सूची की विधि का उपयोग करें :
l = list(...)
l.insert(index, item)
वैकल्पिक रूप से, आप एक स्लाइस अंकन का उपयोग कर सकते हैं:
l[index:index] = [item]
यदि आप उस आइटम को ले जाना चाहते हैं जो सूची में पहले से ही निर्दिष्ट स्थिति में है, तो आपको उसे हटाकर नई स्थिति में सम्मिलित करना होगा:
l.insert(newindex, l.pop(oldindex))
last index + 1
त्रुटियों के बिना सम्मिलित कर सकते हैं। तत्व को केवल उस स्थिति में सूची में जोड़ा जाता है।
a.insert(99999, 1)
In [14]: a
Out[14]: [...., 1]
एक छोटा सा समाधान, जो केवल आइटम को अंत तक ले जाता है, कहीं भी यह नहीं है:
l += [l.pop(0)]
उदाहरण के लिए:
>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]
l.append(l.pop(0))
। यह केवल थोड़ा लंबा है, लेकिन यह बहुत अधिक पठनीय है।
यदि आप आइटम की स्थिति नहीं जानते हैं, तो आपको पहले सूचकांक खोजने की आवश्यकता हो सकती है:
old_index = list1.index(item)
फिर इसे स्थानांतरित करें:
list1.insert(new_index, list1.pop(old_index))
या IMHO एक क्लीनर तरीका:
try:
list1.remove(item)
list1.insert(new_index, item)
except ValueError:
pass
pass
बयान पर रोक लगाने के लिए सही हूं ... कभी भी अपवादों को छिपाएं नहीं - इस तरह के उदाहरण में डिफ़ॉल्ट चीज एक क्लीनर त्रुटि बयान या प्रिंट स्टेटमेंट प्रदान करने के लिए होनी चाहिए ... raise ValueError(f'Unable to move item to {new_index}')
या print(f'Moving item to {new_index} failed. List remains unchanged.')
। हो सकता है pass
कि किसी फंक्शन में बुलाया जाए try_to_move_item
या कुछ ऐसा किया जाए जिससे यह समझ में आए कि ऑपरेशन चुपचाप विफल हो सकता है।
एक समाधान बहुत सरल है, लेकिन आपको मूल स्थिति के सूचकांक और नई स्थिति के सूचकांक को जानना होगा:
list1[index1],list1[index2]=list1[index2],list1[index1]
मैंने समय-सीमा के साथ एक ही सूची में एक आइटम को स्थानांतरित करने के लिए कुछ तरीकों को प्रोफाइल किया। अगर j> i का उपयोग करने वाले ये हैं:
┌──────────┬──────────────────────┐ │ 14.4usec [x [i: i] = x.pop (j), ec Ec 14.5usec [x [i: i] = [x.pop (j)] ec │ 15.2usec .in x.insert (i, x.pop (j)) ec └──────────┴──────────────────────┘
और यहाँ का उपयोग करने के लिए अगर j <= i:
┌──────────┬───────────────────────────┐ │ 14.4usec [x [i: i] = x [j], डेल x [j] ec; │ 14.4usec [x [i: i] = [x [j]]; del x [j] ec │ 15.4usec .in x.insert (i, x [j]); del x [j] ec └──────────┴───────────────────────────┘
बहुत बड़ा अंतर नहीं है यदि आप इसे केवल कुछ ही बार उपयोग करते हैं, लेकिन यदि आप मैनुअल छंटाई जैसे भारी सामान करते हैं, तो सबसे तेज़ लेना महत्वपूर्ण है। अन्यथा, मैं आपको केवल वही पढ़ने की सलाह दूंगा जो आपको लगता है कि सबसे अधिक पठनीय है।