【问题标题】:using comparative operators in string slicing在字符串切片中使用比较运算符
【发布时间】:2019-02-22 11:13:05
【问题描述】:

我正在学习一个教程,但被这个有趣的字符串切片部分卡住了。假设我有字符串 ,

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[1:] if s.startswith('-') else s
  • 坦率地说,string_to_int 是非常不可读的 IMO,不知道为什么会在教程中使用它!

标签: python python-3.x string lambda


【解决方案1】:

对于以-False 开头的字符串,s[0] == '-' 将评估为TrueTrue 的数值为1False 0,所以效果是从索引1 开始切片,当它以- 开头时(跳过-)或从0否则(不跳过任何内容,因为没有-)。

从本质上讲,这是一种非常聪明的方法,可以从字符串中准确地删除一个前导 -(如果存在)。

【讨论】:

    【解决方案2】:

    让我们看看。

    s[0] == '-'
    

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

    如果你把它换成一个,你会更好地理解:

    s[1:]
    

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

    但是!如果是False,比如s = "+123",那么False等价于0,它会返回整个字符串。

    【讨论】:

      猜你喜欢
      • 2017-03-28
      • 2013-08-23
      • 2016-10-22
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 2013-09-16
      • 2019-07-25
      • 1970-01-01
      相关资源
      最近更新 更多