web-dev-qa-db-ja.com

pythonのプレフィックスで始まる文字列をリストから削除する方法

私はこの文字列のリストといくつかのプレフィックスを持っています。これらのプレフィックスのいずれかで始まるすべての文字列をリストから削除したいと思います。私は試した:

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

何が問題なのですか?

12
EerlijkeDame

グレッグのソリューションは間違いなくよりPythonicですが、元のコードでは、おそらくこのようなものを意味していました。 (list[:]構文を使用して)コピーを作成し、コピーを繰り返し処理することに注意してください。リストを繰り返し処理するときにリストを変更しないでください。

prefixes = ('hello', 'bye')
list = ['hi', 'helloyou', 'holla', 'byeyou', 'hellooooo']
for Word in list[:]:
    if Word.startswith(prefixes):
        list.remove(Word)
print list
7
merlin2011

notプレフィックスの1つで始まるすべての単語を含む新しいリストを作成できます。

newlist = [x for x in list if not x.startswith(prefixes)]

コードが機能しない理由は、startswithメソッドがブール値を返し、そのブール値をリストから削除するように要求しているためです(ただし、リストにはブール値ではなく文字列が含まれています)。

変数にlistという名前を付けることは、通常、事前定義されたlist型の名前であるため、お勧めできません。

21
Greg Hewgill
print len([i for i in os.listdir('/path/to/files') if not i.startswith(('.','~','#'))])
0
David J Merritt