बजाय इस प्रयास करें:
for i in xrange(len(data)):
data[i] = "everything"
बुनियादी समस्या का उसका है कि जब आप data[i]
लिखते हैं, data
एक सूची होने के साथ, i
जरूरतों एक पूर्णांक, सूची में एक संख्यात्मक सूचकांक होना है। लेकिन पाश में
for item in data
item
वास्तविक बात सूची में है कि, यानि कि एक स्ट्रिंग, नहीं बात के संख्यात्मक सूचकांक है। xrange
एक पुनरावर्तक है जो सूची में मानों की बजाय संख्याएं उत्पन्न करता है, ताकि आप इसका उपयोग कर सकें।
एक वैकल्पिक होगा
for i, _ in enumerate(data):
data[i] = "everything"
enumerate
समारोह आप प्रपत्र (index, item)
की tuples की पुनरावर्तक देता है, तो तुम सब करने की जरूरत है सूचकांक लेने के लिए और आइटम के बारे में भूल है। मुझे यकीन नहीं है कि एक तरफ या अन्य (enumerate
या xrange
) काफी तेज़ या बेहतर होगा, क्योंकि मुझे लगता है कि सूचियों में उनकी लंबाई एक चर में संग्रहित होती है ताकि इसे सूची तत्वों के माध्यम से गिनने के बिना तुरंत पहुंचा जा सके।
हालांकि, अगर आप पुरानी सूची मूल्य की जरूरत है नई सूची मूल्य की गणना करने, enumerate
तरह से शायद थोड़ा तेज हो जाएगा क्योंकि आप अजगर सूची में तत्व को देखने के करने से बचने:
for i, item in enumerate(data):
data[i] = func(item)
इस तरह
data = [func(item) for item in data]
जब आप ऐसा करते हैं, अजगर प्रत्येक आइटम के माध्यम से data
में है, इसलिए जाना यह करने के लिए समारोह लागू होते हैं, और स्वचालित रूप से परिणामों से एक नई सूची का निर्माण करेगी,: बात की बेहतर समझ के एक सूची है, हालांकि के रूप में व्यक्त किया जाता है y कहां सूची में सही जगह पर func(item)
के परिणाम डालने के बारे में चिंता करने की ज़रूरत नहीं है। आपका मूल उदाहरण वास्तव में
data = ["everything" for item in data]
यह थोड़ा अजीब (या वैकल्पिक हल) है, लेकिन इसे सही ढंग से काम करता है। मुझे नहीं पता था कि ओवरराइडिंग आइटम (सूची में) को अपना आईडी दिया जाना चाहिए। धन्यवाद। –
@sigo: यह वास्तव में एक कामकाज नहीं है, यह इस तरह के कार्य करने के लिए 100% सही और पूरी तरह से सामान्य तरीका है (लेकिन ध्यान दें कि मैंने सूची समझ के बारे में क्या कहा है)। –
इस विशेष मामले में, सूची समझ को तेजी से 'डेटा = ["सब कुछ"] * लेन (डेटा)' द्वारा प्रतिस्थापित किया जा सकता है। – EOL