2011-12-16 8 views
6

लोगों की सूची समझ के साथ सूची तत्व संशोधित करें,पायथन

मैं सूची समझ के साथ सूची तत्व को संशोधित करना चाहता हूं। उदाहरण के लिए, यदि तत्व नकारात्मक है, तो इसमें 4 जोड़ें।

इस प्रकार सूची

a = [1, -2 , 2] 

a = [1, 2, 2] 

निम्नलिखित कोड काम करता है में परिवर्तित हो जाएगा, लेकिन अगर वहाँ यह करने के लिए एक बेहतर तरीका है मैं सोच रहा हूँ?

धन्यवाद।

for i in range(len(a)): 
    if a[i]<0: 
     a[i] += 4 

उत्तर

11
a = [b + 4 if b < 0 else b for b in a] 
+2

यदि सूची एक बहुत बड़ा होगा इस तरह से कारण स्मृति समस्याओं है? – nos

+0

मुझे नहीं पता। मुझे लगता है कि यह एक नई सूची बनाता है जिसे इसे कॉपी करने से पहले कहीं भी संग्रहीत किया जाना चाहिए, इसलिए शायद। – BenH

+2

जब तक आप नहीं जानते कि डेटासेट * विशाल * होने वाला है, तो मैं इसके बारे में ज्यादा चिंता नहीं करता ... इसके अलावा, जनरेटर अभिव्यक्ति ऐसे मुद्दों को हल करने के लिए एक लंबा रास्ता तय कर सकती है (हालांकि इस मामले में नहीं)। –

1

क्यों उत्परिवर्तित, जब आप केवल एक नई सूची वापस कर सकते हैं जैसा दिखता है कि आप इसे चाहते हैं?

[4 + x if x < 0 else x for x in [1, -2, 2]] 
3

इस संस्करण पुराना है, यह अजगर 2,4

>>> [x < 0 and x + 4 or x for x in [1, -2, 2]] 
0: [1, 2, 2] 

पर काम करेगा अजगर के नए संस्करण के लिए एडम वैगनर के रूप conditional expressions का उपयोग करें या BenH उत्तर देता

2

इस प्रयास करें:

b = [x + 4 if x < 0 else x for x in a] 

या यदि आप एक सूची समझ से map अधिक पसंद:

b = map(lambda x: x + 4 if x < 0 else x, a) 
6

आप यथा-स्थान सूची बदलना चाहते हैं, यह लगभग सबसे अच्छा तरीका है। सूची समझ एक नई सूची तैयार करेगी। तुम भी enumerate इस्तेमाल कर सकते हैं, और काम करने के लिए a[i] किया जाना चाहिए:

for i, x in enumerate(a): 
    if x < 0: 
    a[i] = x + 4