2012-04-06 12 views
6

मैं पायथन के लिए नया हूं और मुझे सूचियों के साथ कठिनाइयों का सामना करना पड़ रहा है। मैं मूल्य 10.5 के अलावा सूची के भीतर सभी मूल्यों से 1 घटाना चाहता हूं। नीचे दिया गया कोड एक त्रुटि देता है कि x3 सूची असाइनमेंट अनुक्रमणिका सीमा से बाहर है। कोड अब तक:पायथन-सूची के भीतर मूल्य का सब्सट्रेशन

x2=[10.5, -6.36, 11.56, 19.06, -4.37, 26.56, 9.38, -33.12, -8.44, 0.31, -13.44, - 6.25, -13.44, -0.94, -0.94, 19.06, 0.31, -5.94, -13.75, -23.44, -51.68, 10.5] 
x3=[] 
i=0 
while (i<22): 
if x2[i]==10.5: 
    x3[i]=x2[i] 
else: 
    x3[i]=x2[i]-1 
break 
#The result I want to achieve is: 
#x3=[10.5, -7.36, 10.56, 18.06, -5.37, 25.56, 8.38, -34.12, -9.44, -1.31, -14.44, -7.25, -14.44, -1.94, -1.94, 18.06, -1.31, -6.94, -14.75, -24.44, -52.68, 10.5] 
+4

+1 उदाहरण इनपुट, वांछित आउटपुट, और कोड आप की कोशिश की है पेश करने के लिए। –

+1

जिस तरह से आप सूची में तत्व जोड़ने की कोशिश कर रहे हैं शब्दकोशों के लिए काम करता है; सूचियों के लिए, आप इसे असाइन नहीं कर सकते हैं। या तो 'list.append' विधि का उपयोग करें या' मैप 'और * सूची समझ * के साथ सुझावों के सुझावों में से एक का उपयोग करें। –

उत्तर

0
x2=[10.5, -6.36, 11.56, 19.06, -4.37, 26.56, 9.38, -33.12, -8.44, 0.31, -13.44, - 6.25, -13.44, -0.94, -0.94, 19.06, 0.31, -5.94, -13.75, -23.44, -51.68, 10.5] 
x3=[] 
for value in x2: 
    if value != 10.5: 
     value -= 1 
    x3.append(value) 
7

निम्नलिखित का प्रयास करें:

x3 = [((x - 1) if x != 10.5 else x) for x in x2] 
0

अजगर के अंतर्निहित समारोह नक्शा वास्तव में स्थिति आप हाथ में है के लिए काफी है कि और एक गुमनाम समारोह का उपयोग कर रहा है समस्या को हल करना एक लाइनर बन जाता है:

map(lambda x: x if x == 10.5 else x - 1, x2) 

या यदि आप लैम्ब्डा फ़ंक्शंस का उपयोग करने में सहज नहीं हैं, तो आप def समारोह अलग से ऑफ़लाइन:

def func(x): 
    if x == 10.5: 
     return x 
    else: 
     return x - 1 

map (func, x2) 
3
x2 = [10.5, -6.36, 11.56, 19.06, -4.37, 26.56, 9.38, -33.12, -8.44, 0.31, -13.44, - 6.25, -13.44, -0.94, -0.94, 19.06, 0.31, -5.94, -13.75, -23.44, -51.68, 10.5] 
x3 = map(lambda x: x if x == 10.5 else x - 1, x2) 

अजगर सुरुचिपूर्ण जा रहा है।

0

मानचित्र सबसे अच्छा विकल्प है, लेकिन अलग अलग प्रयोग को कम करता है, तो आप होना चाहते हैं: डी

>>> x2 = [10.5, -6.36, 11.56, 19.06, -4.37, 26.56, 9.38, -33.12, -8.44, 0.31, -13.44, - 6.25, -13.44, -0.94, -0.94, 19.06, 0.31, -5.94, -13.75, -23.44, -51.68, 10.5] 
>>> reduce(lambda x,y: x+[y if y==10.5 else y-1], x2, []) 
[10.5, -7.36, 10.56, 18.06, -5.37, 25.56, 8.38, -34.12, -9.44, -0.69, -14.44, -7.25, -14.44, -1.94, -1.94, 18.06, -0.69, -6.94, -14.75, -24.44, -52.68, 10.5]