【发布时间】:2018-07-12 08:44:05
【问题描述】:
是否有可能用列表理解来做这个技巧:
queries = """watch movie online, sport news, movie poster, course of events, movie in this summer, python course, serials about sports, watch movie about training course"""
keywords = ['movie','course']
这个方法很好
for x in queries.split(','):
for y in keywords:
if y in x:
print(x)
break
当我使用这样的列表理解时:
r = [print(x) for x in queries.split(',') for y in keywords if y in x]
我有两个匹配两个关键字watch movie about training course 的 2 次结果
当我在这个example 中使用方法时,我遇到了一个错误'list' object is not an iterator
【问题讨论】:
-
不要在这里使用列表推导。列表推导式用于创建列表而不是用于打印
-
print(x)很简单,我可以在这个结构中使用[lst.append(x)]。然后我可以使用 set(lst) 来做不同的值。也许存在一种单行构造的方法? -
没有。 不要在列表解析中使用
lst.append,列表解析用于创建列表而不是用于副作用。 -
你可以做类似
matches = [x for x in queries.split(',') if any(y in x for y in keywords)]然后for match in matches: print(match) -
一般来说,不要将列表理解视为“单行 for 循环”。那不是它的目的。它是一种用于创建列表的功能构造,以一种美观、易读的格式组合映射/过滤行为。不要在列表推导中使用副作用,如果最后不需要列表,请不要使用列表推导。
标签: python python-3.x list-comprehension