Python'da looping constructs ile list comprehension karıştırıyor gibi görünüyor.
Bir liste anlama üretir - bir liste! Mevcut bir listede tek bir ödeve kendini ödünç vermez. (Bunu yapmak için sözdizimine işkence edebilirsiniz ...)
Kodunuzdan ne yapmaya çalıştığınız tam olarak net olmasa da, listenin üzerinde geçiş yapmaya daha benzer olduğunu düşünüyorum (akış denetimi) bunu yapmak için makul bir yol olduğunu ve C, Pascal, vb Ama senin ne yapacağını olduğunu
for pattern in patterns:
if lst[0] == pattern: lst[0]=''
:
Döngü böyle liste üzerinde (liste anlama) listesinin meydana vs Ayrıca, sadece bir değer için listeyi test edebilir ve değiştirebilir:
if lst[0] in patterns: lst[0] = ''
Veya, endeksi bilmiyorsanız:
i=lst.index[pattern]
lst[i]=''
ya, listelerin listesi var ve her alt liste her birinci elemanını değiştirmek isterseniz:
for i, sublst in enumerate(lst):
if sublst[i][0] in patterns: sublist[i][0]=''
vb vb.
Bir listenin her elemanına bir şey uygulamak isterseniz, liste kavrama, harita veya Python kitindeki diğer birçok araçtan birini kullanarak bakabilirsiniz.
Şahsen ben genellikle daha liste oluşturulması için liste türetimi kullanma eğiliminde: fazlasıdır listelerinin aynı listesini değiştirmek için
l=[]
for i in range(4):
l.append([])
for j in range(5):
l[i].append(j)
Ama: daha doğal olduğu
l=[[ x for x in range(5) ] for y in range(4)] #init a list of lists...
anlaşılabilir?
Bu:
l=[['new value' if j==0 else l[i][j] for j in range(len(l[i]))] for i in range(len(l))]
veya bu:
for i,outter in enumerate(l):
l[i][0]='new value'
YMMV
Here bu büyük bir öğretici olduğunu.
Sanırım bunun içinizde var ... – dawg
Bu çok net değil. Bu bir anlık uyarı işareti. –