私はこの文字列のリストといくつかのプレフィックスを持っています。これらのプレフィックスのいずれかで始まるすべての文字列をリストから削除したいと思います。私は試した:
prefixes = ('hello', 'bye')
list = ['hi', 'helloyou', 'holla', 'byeyou', 'hellooooo']
for Word in list:
list.remove(Word.startswith(prexixes)
だから私は私の新しいリストを次のようにしたいと思います:
list = ['hi', 'holla']
しかし、私はこのエラーを受け取ります:
ValueError: list.remove(x): x not in list
何が問題なのですか?
グレッグのソリューションは間違いなくよりPythonicですが、元のコードでは、おそらくこのようなものを意味していました。 (list[:]
構文を使用して)コピーを作成し、コピーを繰り返し処理することに注意してください。リストを繰り返し処理するときにリストを変更しないでください。
prefixes = ('hello', 'bye')
list = ['hi', 'helloyou', 'holla', 'byeyou', 'hellooooo']
for Word in list[:]:
if Word.startswith(prefixes):
list.remove(Word)
print list
notプレフィックスの1つで始まるすべての単語を含む新しいリストを作成できます。
newlist = [x for x in list if not x.startswith(prefixes)]
コードが機能しない理由は、startswith
メソッドがブール値を返し、そのブール値をリストから削除するように要求しているためです(ただし、リストにはブール値ではなく文字列が含まれています)。
変数にlist
という名前を付けることは、通常、事前定義されたlist
型の名前であるため、お勧めできません。
print len([i for i in os.listdir('/path/to/files') if not i.startswith(('.','~','#'))])