Python中加减运算符后接比较运算符的语法含义解析
Python中布尔表达式参与算术运算的解释
原求最小窗口子串代码
import collections import character_counter def min_window(str1, str2): result_char, missing_char = collections.Counter(str2), len(str2) i = p = q = 0 for j, c in enumerate(str1, 1): missing_char -= result_char[c] > 0 result_char[c] -= 1 if not missing_char: while i < q and result_char[str1[i]] < 0: result_char[str1[i]] += 1 i += 1 if not q or j - i <= q - p: p, q = i, j return str1[p:q] str1 = "PRWSOERIUSFK" str2 = "OSU" print("Original Strings:\n",str1,"\n",str2) print("Minimum window:") print(min_window(str1,str2))
用户的问题与实验
我正在理解上述求最小窗口子串的Python代码,其中出现了两次在加减运算符后接<或>的情况(如missing_char -= result_char[c] > 0)。请问在运算符和数值后接>的语法是什么意思?
我进行了如下实验:
val = 5 val2= 8 val += val2 > -1 print(val) # 输出结果为6,而非预期的13 # 当val2 < -1时,输出结果为5 # 为何仅累加1?
解答
这是因为Python中的布尔值会自动转换为整数参与算术运算:True等价于整数1,False等价于整数0。
你实验里的val += val2 > -1,本质是先计算布尔表达式val2 > -1的结果:
- 当val2=8时,
8 > -1为True,转换成整数就是1,所以val = 5 + 1 = 6 - 当val2 < -1时,表达式结果为
False,转换成整数0,所以val = 5 + 0 = 5
回到原代码里的missing_char -= result_char[c] > 0,这里的逻辑是:
result_char是用collections.Counter统计的str2中各字符的数量- 当
result_char[c] > 0时,说明当前字符c是我们还需要匹配的目标字符之一,此时布尔值为True(即1),missing_char减1,表示待匹配的字符数减少了一个 - 如果
result_char[c] <= 0,说明这个字符已经超出了需要匹配的数量,布尔值为False(即0),missing_char保持不变
这种写法是一种简洁的判断+计数方式,省去了额外的if-else语句。
内容的提问来源于stack exchange,提问作者Daniel Statler
相关产品推荐
相关产品推荐

