I have two lists as below
tags = [u'man', u'you', u'are', u'awesome']
entries = [[u'man', u'thats'],[ u'right',u'awesome']]
I want to extract entries from entries
when they are in tags
:
result = []
for tag in tags:
for entry in entries:
if tag in entry:
result.extend(entry)
How can I write the two loops as a single line list comprehension?
The appropriate LC would be
The order of the loops in the LC is similar to the ones in nested loops, the if statements go to the end and the conditional expressions go in the beginning, something like
See the Demo -
EDIT - Since, you need the result to be flattened, you could use a similar list comprehension and then flatten the results.
Adding this together, you could just do
You use a generator expression here instead of a list comprehension. (Perfectly matches the 79 character limit too (without the
list
call))This should do it:
The best way to remember this is that the order of for loop inside the list comprehension is based on the order in which they appear in traditional loop approach. Outer most loop comes first, and then the inner loops subsequently.
So, the equivalent list comprehension would be:
In general,
if-else
statement comes before the first for loop, and if you have just anif
statement, it will come at the end. For e.g, if you would like to add an empty list, iftag
is not in entry, you would do it like this:Output: