2011-06-30 16 views
14

समस्या: जब आप निर्माण का उपयोगमूल्य बदलें

for a in _list_: 
    print a 

यह सरणी में हर आइटम प्रिंट करता है। लेकिन आप सरणी को बदल नहीं सकते हैं। क्या सरणी के मूल्य को बदलना संभव है (एक = 123 की तरह कुछ, लेकिन यह काम नहीं कर रहा है) मुझे पता है कि यह संभव है (उदाहरण के लिए लूप में), लेकिन मैं इसे इस तरह से करना चाहता हूं (अधिक सुरुचिपूर्ण)

PHP में ऐसा

foreach ($array as &$value) { 
    $value = 123; 
} 

(वजह से & हस्ताक्षर, संदर्भ के रूप में पारित हो जाता है)

उत्तर

28
for idx, a in enumerate(foo): 
    foo[idx] = a + 42 

नोट हालांकि, कि अगर आप इस कार्य कर रहे हैं, तो आप शायद सूची comprehensions ध्यान देना चाहिए होगा (या map), जब तक कि आप आर ईली जगह में परिवर्तन करना चाहते हैं (बस पुनरावृत्त सूची में आइटम डालें या हटाएं)।

ही पाश एक सूची समझ के रूप में लिखा दिखाई देता है:

foo = [a + 42 for a in foo] 
6

क्योंकि अजगर iterators सिर्फ एक स्मृति में एक वस्तु को "लेबल" कर रहे हैं, की स्थापना यह यह सिर्फ कुछ और को इंगित कर देगा।

यदि पुनरावर्तक एक उत्परिवर्तनीय वस्तु (सूची, सेट, dict आदि) है तो आप इसे संशोधित कर सकते हैं और परिणाम को उसी ऑब्जेक्ट में देख सकते हैं।

>>> a = [[1,2,3], [4,5,6]] 
>>> for i in a: 
... i.append(10) 
>>> a 
[[1, 2, 3, 10], [4, 5, 6, 10]] 

आप के लिए, कहते हैं प्रत्येक मान सेट करना चाहते हैं, 123 आप सूची सूचकांक और यह पहुँच उपयोग कर सकते हैं या एक list comprehension का उपयोग करें:

>>> a = [1,2,3,4,5] 
>>> a = [123 for i in a] 
>>> a 
[123, 123, 123, 123, 123] 

लेकिन यदि आप किसी अन्य सूची बनाते और इसे एक ही नाम पर बाध्यकारी।

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