我有一个列表,其中包含['love', 'hair', 'light', 'hair dryer', 'bright light', 'bright hair dryer']这样的元素,如果它们出现在三联图中,我想过滤单字或双字。我该怎么做?最后我应该有['love', 'bright light', 'bright hair dryer']。具体来说,我需要从列表中删除头发,因为'hair dryer'包含它,但我也有delete'hair dryer'功能,因为'bright hair dryer'拥有它。

最佳答案

此解决方案使用蛮力检查每个字符串与其余字符串(切片数组)的对比,只是为了编写一行代码的乐趣。
如果顺序颠倒,它不会删除字符串,例如"hair bright"不被视为"bright hair dryer"的子。

[ e for i, e in enumerate(mylist) if not any([ e in s for s in mylist[:i] + mylist[i+1:] ]) ]

   #=> ['love', 'bright light', 'bright hair dryer']

10-08 06:40