我写了一些代码来迭代一个列表,看看一行是否包含一个或多个关键字:
STRINGS_TO_MATCH = [ "Foo",
"Bar",
"Oggle" ]
for string in STRINGS_TO_MATCH
if string in line:
val_from_line = line.split(' ')[-1]
有没有人碰巧知道是否有办法让这个更具可读性?列表理解会更适合这里吗?
答案 0 :(得分:2)
这里要记住的是 comprehensions是表达式,其目的是创建一个值 - 列表推导创建列表,dict comprehensions创建dicts,以及设置comprehensions创建集合。在这种情况下,他们不太可能提供帮助,因为您没有创建任何此类对象。
您的代码示例不完整,因为它不会执行任何具有val_from_line
值的内容。我假设您要从包含line
中的任何字符串的STRINGS_TO_MATCH
中提取最后一个“单词”,但是很难处理这些不完整的信息,所以这个答案可能对我而言知道,完全没用。
假设我是正确的,找出line
是否包含任何STRINGS_TO_MATCH
的最简单方法是使用表达式
any(s in line for s in STRINGS_TO_MATCH)
这使用了一个所谓的生成器表达式,它类似于列表推导 - 解释器可以迭代它以生成一系列值 - 但它不能创建一个值列表,它只是创建它们作为客户端代码(在这种情况下,any
内置函数)请求它们。所以我可能会将您的代码重写为
if any(s in line for s in STRINGS_TO_MATCH):
val_from_line = line.split(' ')[-1]
在此之后我会让你决定你真正想做什么,警告说明这段代码执行后val_from_line
可能存在也可能不存在(取决于条件是否为真),这绝不是一个完全舒适的情况。