2010-03-22 16 views
122

मुझे नेट पर इस समस्या के लिए एक अच्छा समाधान नहीं मिला है (संभवतः क्योंकि स्विच, स्थिति, सूची और पायथन सभी ऐसे अधिभारित शब्द हैं)।पायथन सूची में दो आइटमों की स्थिति कैसे स्विच करें?

यह बल्कि आसान है - मैं इस सूची है: - उनकी सही स्थिति जानने के नहीं, केवल कि वे सही एक दूसरे के और password2 के बगल में कर रहे हैं

['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter'] 

मैं 'password2' और 'password1' की स्थिति स्विच करना चाहते हैं पहला है

मैंने इसे कुछ लंबी हवा वाली सूची-सबस्क्रिप्टिंग के साथ पूरा कर लिया है, लेकिन मुझे आश्चर्य हुआ कि कुछ और अधिक सुरुचिपूर्ण चीज़ों के साथ आना संभव है?

+0

क्या आपकी समस्या सूची में 'password2' खोजने की कोशिश कर रहा है? क्या 'password1' 'password2' से पहले आ सकता है? क्या यहां कुछ जटिलता है जो आपके मूल प्रश्न में नहीं आती है? अन्यथा मैं @unwind से सहमत हूं। –

+3

आपको जो मिला है उसे पोस्ट करना चाहिए - मुझे "लंबी लंबी हवा वाली सूची-सबस्क्रिप्टिंग" के बारे में उत्सुकता है। – samtregar

+0

इंडेक्स 1 = इंडेक्स ('पासवर्ड 1') की रेखाओं के साथ कुछ; index2 = अनुक्रमणिका ('password2'); ऑर्डर = ऑर्डर [: index2] .append (ऑर्डर [इंडेक्स 1])। संलग्न करें (ऑर्डर [इंडेक्स 2])। संलग्न करें (ऑर्डर [इंडेक्स 1 + 1:]); कुछ और लाइनों पर फैल गया। सुंदर, नहीं। – mikl

उत्तर

249
i = ['title', 'email', 'password2', 'password1', 'first_name', 
     'last_name', 'next', 'newsletter'] 
    a, b = i.index('password2'), i.index('password1') 
    i[b], i[a] = i[a], i[b] 
5

कैसे यह कभी से अधिक समय

tmp = my_list[indexOfPwd2] 
my_list[indexOfPwd2] = my_list[indexOfPwd2 + 1] 
my_list[indexOfPwd2 + 1] = tmp 

सिर्फ एक सादे स्वैप अस्थायी भंडारण का उपयोग कर रहे हो सकता है।

+6

यदि आप इसके बारे में वास्तव में "पायथनिक" होना चाहते हैं, तो आप हमेशा यह भी कर सकते हैं: 'my_list [indexOfPwd2], my_list [indexOfPwd2 + 1] = my_list [indexOfPwd2 + 1], my_list [indexOfPwd2] ' –

104

सरल अजगर स्वैप इस तरह दिखता है:

foo[i], foo[j] = foo[j], foo[i] 

अब तुम सब करने की जरूरत है आंकड़ा है क्या i है, और है कि आसानी से index साथ किया जा सकता:

i = foo.index("password2") 
13

अपने चश्मे को देखते हुए, मैं स्लाइस-असाइनमेंट का उपयोग करता हूं:

>>> L = ['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter'] 
>>> i = L.index('password2') 
>>> L[i:i+2] = L[i+1:i-1:-1] 
>>> L 
['title', 'email', 'password1', 'password2', 'first_name', 'last_name', 'next', 'newsletter'] 
, कई होगा के रूप में

L[i:i+2] = reversed(L[i:i+2]) 

अगर आपको लगता है कि अधिक पठनीय लगता है:

टुकड़ा असाइनमेंट के दाएँ हाथ की ओर एक "उलट टुकड़ा" है और यह भी स्पष्ट किया जा सकता है।

+0

यह क्यों नहीं है काम करना अगर आप शीर्षक और मेल स्विच करना चाहते हैं, तो दूसरे तत्व के साथ पहला तत्व? –

+0

क्षमा करें अब मैं समझता हूं, i-1 पर कोई तत्व नहीं है इसलिए खाली सूची लौटा दी गई है –

0

आप उदाहरण के लिए उपयोग कर सकते हैं:

>>> test_list = ['title', 'email', 'password2', 'password1', 'first_name', 
       'last_name', 'next', 'newsletter'] 
>>> reorder_func = lambda x: x.insert(x.index('password2'), x.pop(x.index('password2')+1)) 
>>> reorder_func(test_list) 
>>> test_list 
... ['title', 'email', 'password1', 'password2', 'first_name', 'last_name', 'next', 'newsletter'] 
-1

मैं अजगर में एक विशेषज्ञ नहीं हूँ, लेकिन आप की कोशिश कर सकते: कहना

i = (1,2) 

res = lambda i: (i[1],i[0]) 
print 'res(1, 2) = {0}'.format(res(1, 2)) 

ऊपर ओ/p देना होगा के रूप में:

res(1, 2) = (2,1) 
+1

यह स्वैप करने के लिए कुंजी की स्थिति जानने के बिना काम नहीं करता है। – mikl

संबंधित मुद्दे