字符串列表推导式问题:判断子串存在为何返回空列表?
问题分析与解决方案
嘿,我来帮你搞明白这个问题~
你的代码为什么返回空列表?
你写的列表推导式里,if x in list6这部分的逻辑是判断x是否是list6中的一个完整元素,而不是判断x是否是list6里某个字符串的子串。
举个例子:list5里的'apple'并不是list6的直接元素(list6的元素是'I ate an apple'这类完整句子),所以这个条件永远不成立,最终得到空列表就不奇怪啦。
为什么整数列表里能正常运行?
在整数列表的场景下,你的需求应该是判断整数元素是否存在于另一个列表中,这时候x in list的逻辑正好匹配你的需求——比如2 in [1,2,3]就是判断2是不是列表里的元素,所以能得到正确结果。
但到了字符串场景,你的需求变成了子串匹配,和整数场景的“元素存在判断”完全是两回事,自然不能用同样的逻辑。
正确的代码写法
要实现你的需求(判断list5的字符串是否是list6中任意字符串的子串),需要遍历list6里的每个字符串,检查x是否是它的子串,只要有一个满足就保留x。可以用any()函数来简化这个判断:
list5 = ['apple', 'mango', 'sherbet'] list6 = ['I ate an apple', 'I ate two apples', 'I love mango'] result = [x for x in list5 if any(x in s for s in list6)] print(result) # 输出: ['apple', 'mango']
这里any(x in s for s in list6)会逐个检查list6中的每个字符串s,只要有一个s包含x,就返回True,对应的x就会被加入结果列表。
内容的提问来源于stack exchange,提问作者achaud
相关产品推荐
相关产品推荐

