Python 在字符串切片中使用比较运算符
我在学习一个教程,却被这个有趣的字符串切片部分卡住了。假设我有字符串sPython 在字符串切片中使用比较运算符,python,python-3.x,string,lambda,Python,Python 3.x,String,Lambda,我在学习一个教程,却被这个有趣的字符串切片部分卡住了。假设我有字符串s s='-123' 并尝试使用 s[s[0] == '-':] 在切片部分使用比较运算符==的目的是什么?结果字符串是什么 完整代码如下: def string_to_int(s): return functools.reduce(lambda running_sum, c: running_sum * 10 + string.digits.index(c), s[s[0] == '-':],
s='-123'
并尝试使用
s[s[0] == '-':]
在切片部分使用比较运算符==的目的是什么?结果字符串是什么
完整代码如下:
def string_to_int(s):
return functools.reduce(lambda running_sum, c: running_sum * 10 +
string.digits.index(c), s[s[0] == '-':], 0) * (-1 if s[0] == '-' else 1)
s[0]='-'
将对以-
开头的字符串计算为True
,否则为False
True
的数值为1
,False
0
,因此效果是从索引1
开始,从-
开始切片(跳过-
),否则从0
开始切片(因为没有-
)
从本质上讲,这是一种非常聪明的方法,可以从一个字符串(如果它存在的话)中精确地去掉一个前导的-
。让我们看看
s[0] == '-'
这意味着“字符串的第一个字符是“-”符号吗?在您的例子中,这是True
,而True
相当于1
如果将其替换为一,您可以更好地理解:
s[1:]
因此,它将返回除第一个字符以外的所有字符串
但是!如果它是
False
,比如在s=“+123”
,那么当False
相当于0
,它将返回整个字符串。想象它就像s[1:]如果s.startswith('-')else s
坦白地说,字符串在我看来是非常不可读的,我不知道为什么要在教程中使用它!