You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中"YNEOS"切片判断反转字符串的代码逻辑疑问

问题场景

在字符串校验场景中,规则为:程序接收用户输入的两个字符串s、t,若t是s的反转字符串则输出YES,否则输出NO。

基础实现

常规写法逻辑清晰,运行结果符合预期,代码如下:

s = input()
t = input()
 
if t == s[::-1]:
    print("YES")
else:
    print("NO")
极简代码原理

这段一行写法是把Python的几个语法特性组合到了一起,逐部分拆解就很容易懂:

print("YNEOS"[input()!=input()[::-1]::2])

核心前置规则

  • Python里布尔类型是整型的子类:False和整数0完全等价,True和整数1完全等价,可以直接当索引值使用。
  • Python序列切片规则为[起始位置:结束位置:步长],省略结束位置时默认取到序列末尾;步长为2时,会从起始位置开始每隔1个字符取一个值。
  • 比较运算符两侧的表达式严格从左到右求值,不会出现右侧先计算的情况。
  • 对字符串做[::-1]切片就是返回字符串的反转结果,和基础写法里的用法完全一致。

逐段逻辑拆解

  1. 先看判断部分:input()!=input()[::-1]
    • 先执行左侧第一个input(),读取第一行输入(对应基础写法里的s)
    • 再执行右侧的input()[::-1]:先读取第二行输入(对应基础写法里的t),紧接着把t反转
    • 做不等判断:这里注意t == s[::-1]和s == t[::-1]是完全等价的(等式两边同时反转即可推导,反转两次就会回到原字符串),不存在输入顺序错乱的问题。如果两个值不相等(即t不是s的反转串),判断结果为True(对应整数1);如果两个值相等(即t是s的反转串),判断结果为False(对应整数0)。
  2. 再看外层字符串切片:"YNEOS"[判断结果::2]
    先把字符串"YNEOS"的索引和对应字符列出来:
    索引01234
    字符YNEOS
    • 当判断结果为False(即0,匹配输出YES的场景):切片规则是[0::2],从索引0开始步长为2取到末尾,拿到的字符是索引0的Y、索引2的E、索引4的S,拼接结果就是YES
    • 当判断结果为True(即1,匹配输出NO的场景):切片规则是[1::2],从索引1开始步长为2取到末尾,拿到的字符是索引1的N、索引3的O,拼接结果就是NO

整段代码没有特殊技巧,只是把常规写法里的分支判断、结果映射全部用Python的语法糖压缩到了一行里。


内容的提问来源于stack exchange,提问作者Anonymous Stranger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:45:41