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

时间:2019-02-22 11:13:05

标签: 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] == '-':], 0) * (-1 if s[0] == '-' else 1)

2 个答案:

答案 0 :(得分:4)

对于以s[0] == '-'开头的字符串,

True的求值为-,否则为FalseTrue的数值为1False 0,因此效果是从索引1开始以-进行切片(跳过-)或从0开始(由于没有-,因此不跳过)。

从本质上讲,这是从字符串中精确剥离一个前导-的一种聪明方法。

答案 1 :(得分:1)

让我们看看。

s[0] == '-'

这意味着“字符串的第一个字符是“-”符号吗?在您的情况下为True,而True等效于1

如果将其替换为一个,则可以更好地理解:

s[1:]

因此它将返回除第一个字符以外的所有字符串。

但是!如果它是False(例如在s = "+123"中),则由于False等效于0,它将返回整个字符串。