不同数据类型下Python中in运算符的判断逻辑疑问
关于Python中
in运算符在字符串与列表场景下的判断逻辑疑问 我在使用Python的in运算符时,字符串场景下运行正常,例如调用f('soifsdf','sh')返回True;但切换为列表类型时,即使第一个列表的元素是第二个列表的前两个元素,调用f([1, 2], [1, 2, 3])仍返回False。更换其他方法后问题依旧,想了解这背后的判断逻辑是什么?
def f(a,b): if a in b: return True else: return False f('soifsdf','sh') # 输出:True f([1, 2], [1, 2, 3]) # 输出:False
核心判断逻辑差异
字符串和列表对in运算符的实现逻辑完全不同:
- 字符串场景:
a in b判断的是a是否是b的子字符串——即b中是否包含一段连续的字符序列与a完全匹配。所以'sh' in 'soifsdf'返回True,因为目标字符串的前两个字符正好是'sh'。 - 列表场景:
a in b判断的是a是否是b的直接成员元素——即b的某个独立元素是否与a完全相等。对于[1,2] in [1,2,3],列表[1,2,3]的元素是单个整数1、2、3,没有任何一个元素是列表[1,2],因此返回False。
实现列表的连续子序列判断
如果需要判断列表a是否是列表b的连续子序列,可以自定义函数实现:
def is_sublist(a, b): len_a, len_b = len(a), len(b) if len_a > len_b: return False # 遍历所有可能的起始索引,切片对比 for i in range(len_b - len_a + 1): if b[i:i+len_a] == a: return True return False # 测试示例 print(is_sublist([1,2], [1,2,3])) # 输出:True print(is_sublist([2,3], [1,2,3])) # 输出:True print(is_sublist([1,3], [1,2,3])) # 输出:False
内容的提问来源于stack exchange,提问作者zoe
相关产品推荐
相关产品推荐

