Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在字符串切片中使用比较运算符_Python_Python 3.x_String_Lambda - Fatal编程技术网

Python 在字符串切片中使用比较运算符

Python 在字符串切片中使用比较运算符,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

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
坦白地说,
字符串在我看来是非常不可读的,我不知道为什么要在教程中使用它!