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类型的名称.
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)