【发布时间】:2015-07-31 15:38:54
【问题描述】:
我正在尝试编写一个列表理解语句,如果它当前不包含在列表中,它将只添加一个项目。有没有办法检查当前正在构建的列表中的当前项目?下面是一个简单的例子:
输入
{
"Stefan" : ["running", "engineering", "dancing"],
"Bob" : ["dancing", "art", "theatre"],
"Julia" : ["running", "music", "art"]
}
输出
["running", "engineering", "dancing", "art", "theatre", "music"]
不使用列表理解的代码
output = []
for name, hobbies in input.items():
for hobby in hobbies:
if hobby not in output:
output.append(hobby)
我的尝试
[hobby for name, hobbies in input.items() for hobby in hobbies if hobby not in ???]
【问题讨论】:
-
考虑改用一个集合,因为它会自动为您消除重复。
-
我可以将列表推导的输出放在 set() 构造函数中,但我想知道是否有办法只使用列表推导来做到这一点
-
你可以在 python3.3+ 中滥用
yield from来避免双重循环:set([(yield from x) for x in d.values()])。请注意,执行s=set((yield from x) for x in d.values())会产生几乎 所需的输出...它包含一个额外的None,您必须将其删除,因此s.discard(None)。 (我相信对于 gen exps 和 list-comprehensions 之间的这种行为差异已经存在疑问)。
标签: python list dictionary list-comprehension