我有一个列表,其中包含['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']