我正在跟踪教程,并被困在这个有趣的字符串切片部分。假设我有字符串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)
答案 0 :(得分:4)
s[0] == '-'
开头的字符串, True
的求值为-
,否则为False
。 True
的数值为1
,False
0
,因此效果是从索引1
开始以-
进行切片(跳过-
)或从0
开始(由于没有-
,因此不跳过)。
从本质上讲,这是从字符串中精确剥离一个前导-
的一种聪明方法。
答案 1 :(得分:1)
让我们看看。
s[0] == '-'
这意味着“字符串的第一个字符是“-”符号吗?在您的情况下为True
,而True
等效于1
。
如果将其替换为一个,则可以更好地理解:
s[1:]
因此它将返回除第一个字符以外的所有字符串。
但是!如果它是False
(例如在s = "+123"
中),则由于False
等效于0
,它将返回整个字符串。