我正在学习教程并被这个有趣的字符串切片部分卡住了。假设我有字符串 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)
2 回答
森林海
TA贡献2011条经验 获得超2个赞
s[0] == '-'
将对True
以-
和开头的字符串求值False
。True
具有一个数字值1
,False
0
,所以其效果是从索引片1
起当它与开始-
(跳过-
),或从0
开始否则(跳过无关,因为不存在-
)。
从本质上讲,这是-
从字符串中精确地剥离一个前导的一个过于聪明的方法,如果它存在的话。
侃侃尔雅
TA贡献1801条经验 获得超16个赞
让我们来看看。
s[0] == '-'
这意味着“字符串的第一个字符是“-”符号吗?在您的情况下,即True
, 并且True
等效于1
.
如果将其替换为一个,则可以更好地理解:
s[1:]
所以它将返回除第一个字符之外的所有字符串。
但 !如果是False
,就像 in s = "+123"
,那么 asFalse
等价于0
,它将返回整个字符串。
添加回答
举报
0/150
提交
取消