Python中any([a == b for a, b in zip(string, string[1:])])运行逻辑解析
相邻重复字符判断简化代码逻辑解析
我们可以把这段简化代码拆成4个步骤逐段理解,以测试字符串"hello"为例演示运行流程:
- 第一步:预处理得到错位字符串
string[1:]是对原字符串做切片,去掉第一个字符,得到和原字符串错位一位的新序列。如果输入是"hello",string[1:]的结果就是"ello"。 - 第二步:配对所有相邻字符
zip(string, string[1:])会将两个序列按位置一一配对,最终得到所有相邻的两个字符的组合:('h','e')、('e','l')、('l','l')、('l','o'),完全覆盖所有需要判断的相邻字符对,不需要手动处理索引。 - 第三步:生成每对的判断结果
列表推导式[a == b for a, b in zip(string, string[1:])]会遍历每一对相邻字符,判断两个字符是否相等,输出布尔值列表。对应"hello"的输出就是[False, False, True, False]。 - 第四步:判断是否存在符合条件的项
any()函数接收可迭代对象作为参数,只要对象里有任意一个True值就会直接返回True,全部为False才返回False,刚好匹配需求:只要存在一对相邻相同字符就返回True,否则返回False。
补充说明:你自己写的版本存在边界问题,当遍历到索引i=0时,word[i-1]会取到字符串最后一位的字符,比如输入单字符"a"时,代码会错误判断为存在相邻重复字符返回True,而简化写法天然规避了这个索引错误的问题。
内容的提问来源于stack exchange,提问作者theanimekid
相关产品推荐
相关产品推荐

