Python:如何用lambda+filter获取列表中被其他元素包含的字符串列表
问题分析与解决
你的代码逻辑完全偏离需求:lambda x: x if x in stringlist else ""里的x in stringlist只是检查x本身是否在列表中,这对列表里的每个元素都成立,所以filter会原样返回所有元素,根本没实现“被其他字符串包含”的判断。
要实现需求,需要判断当前字符串x是否被列表里其他字符串包含,也就是存在某个y≠x,且x是y的子串。用lambda+filter的正确写法如下:
stringlist = ["red", "blue", "loss", "boss", "sloss"] result = list(filter(lambda x: any(y != x and x in y for y in stringlist), stringlist)) print(result) # 输出: ['loss']
代码说明
any(...)用来检测是否存在符合条件的字符串y:y != x:排除字符串自身包含自己的情况(避免误判)x in y:检查x是否是y的子串
- filter会保留所有满足上述条件的x,也就是被列表中其他字符串包含的元素。
内容的提问来源于stack exchange,提问作者D-Money
相关产品推荐
相关产品推荐

