[entry for tag in tags for entry in entries if tag in entry]
LC中循环的顺序与嵌套循环的顺序类似,if语句在末尾,条件表达式在开头,类似于
[a if a else b for a in sequence]
看演示-
>>> tags = [u'man', u'you', u'are', u'awesome']
>>> entries = [[u'man', u'thats'],[ u'right',u'awesome']]
>>> [entry for tag in tags for entry in entries if tag in entry]
[[u'man', u'thats'], [u'right', u'awesome']]
>>> result = []
for tag in tags:
for entry in entries:
if tag in entry:
result.append(entry)
>>> result
[[u'man', u'thats'], [u'right', u'awesome']]
编辑-由于需要将结果展平,因此可以使用类似的列表理解,然后展平结果。
>>> result = [entry for tag in tags for entry in entries if tag in entry]
>>> from itertools import chain
>>> list(chain.from_iterable(result))
[u'man', u'thats', u'right', u'awesome']
把这些加在一起,你就可以
>>> list(chain.from_iterable(entry for tag in tags for entry in entries if tag in entry))
[u'man', u'thats', u'right', u'awesome']
记住这一点的最好方法是,列表理解中for循环的顺序基于它们在传统循环方法中出现的顺序。最外层的循环首先出现,然后是内部循环。
因此,等效的列表理解是:
一般来说,
if-else
语句在第一个for循环之前,如果您只有一个if
语句,它将在最后出现。例如,如果您想添加一个空列表,如果tag
不在条目中,您可以这样做:这应该做到:
合适的信用证是
LC中循环的顺序与嵌套循环的顺序类似,if语句在末尾,条件表达式在开头,类似于
看演示-
编辑-由于需要将结果展平,因此可以使用类似的列表理解,然后展平结果。
把这些加在一起,你就可以
这里使用生成器表达式而不是列表理解。(也完全匹配79个字符的限制(没有
list
调用)相关问题 更多 >
编程相关推荐