如何从python中以prefix开头的列表中删除字符串

Eer*_*ame 11 python string list startswith

我有这个字符串列表和一些前缀.我想删除列表中以任何这些前缀开头的所有字符串.我试过了:

prefixes = ('hello', 'bye')
list = ['hi', 'helloyou', 'holla', 'byeyou', 'hellooooo']
for word in list:
    list.remove(word.startswith(prexixes)
Run Code Online (Sandbox Code Playgroud)

所以我希望我的新列表是:

list = ['hi', 'holla']
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

ValueError: list.remove(x): x not in list
Run Code Online (Sandbox Code Playgroud)

出了什么问题?

Gre*_*ill 23

您可以创建一个新列表,其中包含所有以您的前缀开头的单词:

newlist = [x for x in list if not x.startswith(prefixes)]
Run Code Online (Sandbox Code Playgroud)

你的代码不起作用的原因是该startswith方法返回一个布尔值,你要求从列表中删除该布尔值(但你的列表包含字符串,而不是布尔值).

请注意,命名变量通常不是一个好主意list,因为这已经是预定义list类型的名称.


mer*_*011 8

Greg的解决方案肯定更像Pythonic,但在您的原始代码中,您可能意味着类似这样的东西.观察我们制作副本(使用list[:]语法)并迭代副本,因为在迭代时不应修改列表.

prefixes = ('hello', 'bye')
list = ['hi', 'helloyou', 'holla', 'byeyou', 'hellooooo']
for word in list[:]:
    if word.startswith(prefixes):
        list.remove(word)
print list
Run Code Online (Sandbox Code Playgroud)