I follow some tips but still cannot decompose this list comprehension, what this mean in the middle list? It is mainly for merging some subsets in a list, for example
l1 = ['员工:张三', '实习员工:张三', '职员:李四']
because '员工:张三'
is the subset of '实习员工:张三'
, the reuslt will remove '员工:张三'
l1_res = [word for word in l1 if not any(word in other != word for other in l1)]
I know the outer may like, but what about inner?
l1_res = [] for word in l1: if not any(word in other!=word for other in l1): #how to decompose this line? l1_res.append(word)
Or anyother way to implement this function?
Advertisement
Answer
This can be decomposed to:
l1_res = [] for word in l1: for other in l1: if word in other != word: break else: l1_res.append(word)
This uses two of Python’s easily misleading constructs:
- chained comparison for
word in other != word
, meaningword in other and other != word
for..else
, where theelse
will be executed only if the loop wasn’tbroken
, err,break
wasn’t invoked
Alternatively you can also do:
l1_res = [] for word in l1: found = False for other in l1: if word in other != word: found = True break if not found: l1_res.append(word)