ऐसा लगता है कि आप पाइथन में looping constructs के साथ list comprehension भ्रमित कर रहे हैं।
एक सूची समझ उत्पन्न करता है - एक सूची! यह मौजूदा सूची में खुद को एक ही असाइनमेंट में उधार नहीं देता है। (हालांकि आप इसे करने के लिए वाक्यविन्यास को यातना दे सकते हैं ...)
हालांकि यह बिल्कुल स्पष्ट नहीं है कि आप अपने कोड से क्या करने का प्रयास कर रहे हैं, मुझे लगता है कि यह सूची (प्रवाह नियंत्रण) पर लूपिंग के समान है
for pattern in patterns:
if lst[0] == pattern: lst[0]=''
यह करने के लिए एक उचित तरीका है, और आप सी, पास्कल, आदि लेकिन आप में क्या करेंगे है: एक सूची (सूची समझ)
लूप इस तरह सूची से अधिक उत्पादन बनाम एक मूल्य के लिए सूची का परीक्षण भी कर सकते हैं और इसे बदल सकते हैं:
if lst[0] in patterns: lst[0] = ''
या, यदि आप सूचकांक पता नहीं है:
i=lst.index[pattern]
lst[i]=''
या तो आप सूचियां की एक सूची है और प्रत्येक sublist में से प्रत्येक के पहले तत्व को बदलना चाहते हैं:
for i, sublst in enumerate(lst):
if sublst[i][0] in patterns: sublist[i][0]=''
आदि, आदि, आदि
यदि आप किसी सूची के प्रत्येक तत्व को कुछ लागू करना चाहते हैं, तो आप पाइथन किट में एक सूची समझ, या मानचित्र या कई अन्य उपकरणों का उपयोग करके देख सकते हैं।
व्यक्तिगत रूप से, मैं आमतौर पर सूची निर्माण के लिए और अधिक सूची comprehensions का उपयोग करते हैं:
l=[[ x for x in range(5) ] for y in range(4)] #init a list of lists...
कौन सा की तुलना में अधिक स्वाभाविक है:
l=[]
for i in range(4):
l.append([])
for j in range(5):
l[i].append(j)
लेकिन सूची के उसी सूची है, जो अधिक है संशोधित करने के लिए समझा जा सकता?
यह:
l=[['new value' if j==0 else l[i][j] for j in range(len(l[i]))] for i in range(len(l))]
या इस:
for i,outter in enumerate(l):
l[i][0]='new value'
YMMV
Here इस पर एक बड़ा ट्यूटोरियल है।
मुझे लगता है कि आपके पास यह अंदर है ... – dawg
यह बहुत स्पष्ट नहीं है। यह एक तत्काल चेतावनी संकेत है। –