擅长:python、mysql、java
<p>您可以按相反顺序遍历按短语长度排序的列表,并将每个可能的子短语添加到一个集合中,以便使用集合检查当前短语是否是前一个较长短语的子短语:</p>
<pre><code>output = []
seen = set()
for phrase in sorted(l, key=len, reverse=True):
words = tuple(phrase.split())
if words not in seen:
output.append(phrase)
seen.update({words[i: i + n + 1] for n in range(len(words)) for i in range(len(words) - n)})
</code></pre>
<p>因此:</p>
<pre><code>l = ['love', 'hair', 'light', 'hair dryer', 'bright light', 'bright hair dryer']
</code></pre>
<p><code>output</code>变成:</p>
<pre><code>['bright hair dryer', 'bright light', 'love']
</code></pre>