2016-07-08 5 views
0

私は一般的なプログラミングとPythonの初心者であり、現在のファンダメンタルズを学んでいます。下のスクリプトでは、各リスト要素の文字数を確認し、5文字以上の文字を削除しようとしています。私はこれを達成するためにfor-loopを使用していますが、最初に考慮されたfor-loop範囲に対応しないリスト要素の数の変化のために問題が発生しています。私は範囲がそれ自体変わるようにしようとしましたが、私はまだエラーが得られています。リスト要素を削除してforループの範囲を変更する

# -*- coding: utf-8 -*- 

magicians =['alice','david','carolina'] 

def counter(word): 
    x= sum (c != ' ' for c in word) 
    return x 

print magicians 
for i in range (0,3): 
     magicians[i]=magicians[i].title() 
print magicians 
q= 
Y=range (0,q) 

for i in Y: 
    x= counter(magicians[i]) 
    print x  
    if x<=5: 
     print 'this component will be deleted:', magicians[i] 
     del magicians[i] 
     q=q-1 
     Y=range (0,q) 
print magicians 

あなたの問題への洗練された答えが、この記事であり、あなたに

答えて

-1

ありがとう:Remove items from a list while iterating

最も簡単な1だけあなたが実際にしたい要素を含む新しいリストを作成することです。

+0

私の答えはなぜ投票されたのですか?あなたの理由を説明してください。 – nidhoeggr09

+0

ありがとうございます。私は実際に投票しましたが、(-1)は現れました。 – neowhytem

+0

もう一度投票しようとするといいですね。 – nidhoeggr09

0

あなたのコードの主な問題は、ループ内Y = ...ないfor i in YYに影響を持っているということです。

for i in Y: 
    ... 
     Y=range (0,q) 

あなたwhileループを使用するようにコードを変更し、手動で現在のインデックスと最大インデックスを管理しますが、これはエラーに非常に傾向があることができます:

i = 0 
while i < q: 
    x= counter(magicians[i]) 
    if x<=5: 
     print 'this component will be deleted:', magicians[i] 
     del magicians[i] 
     q=q-1 
    else: 
     i += 1 

代わりの要素を削除します同じリストを繰り返しながらリストから削除する場合は、保持する要素だけを保持して、の第2のリストに値を設定する方がはるかに優れています。リストの理解を使用して:

good_magicians = [m for m in magicians if counter(m) > 5] 
関連する問題