【问题标题】:Weird behavior in Python when slicing a string - returns empty string?切片字符串时Python中的奇怪行为 - 返回空字符串?
【发布时间】:2012-11-02 14:05:57
【问题描述】:

我有一个变量conts,其中包含一个二进制文件的内容(使用rb 作为模式读取它)。现在,当我尝试通过切片获取字符串片段时,我希望看到变量的正确长度(当然还有内容),但我没有。

这是我可以重现的代码,但我不知道这里发生了什么:

hdr1, hdr2 = conts[0:6], conts[10:7]
print "----------------"
print len(conts)
print len(hdr1)
print len(hdr2)
print len(conts)
print "----------------"
print type(hdr1)
print type(hdr2)
print type(conts)

我得到的输出是:

----------------
32174321
6
0
32174321
----------------
<type 'str'>
<type 'str'>
<type 'str'>

这里发生了什么?我以为切片会为每个切片创建一个新字符串?

Python 版本:2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]

注意:切片之间的四字节间隙有意的。问题在于第二个切片返回一个长度为零的字符串,即使有足够的数据。我没有发现任何文件(切片时)需要相邻。

编辑:在意识到我的错误后:我打算从长度超过 17 个字节的字符串中获取字节 0 到 6 和字节 10 到 17。

【问题讨论】:

    标签: python windows python-2.7 slice


    【解决方案1】:

    这是一个空字符串的原因是因为你没有提到你想要一个消极的切片步骤,假设你确实打算向后切片。

    hdr1, hdr2 = conts[0:6], conts[10:7:-1]
    

    会做你想做的,注意-1,它让python知道你在切片时想要后退而不是前进。

    顺便说一句,这也导致了一种反转字符串的简单方法:

    reverse = string[::-1]
    

    切片的格式为:

    [start_index:end_index:step]


    从您的编辑中,我可以看到这个答案对于您的目的可能是多余的,但这是您知道的很好的信息,所以我将保留它。
    以下是您在编辑中所说的执行方式:

    hdr1, hdr2 = conts[0:6], conts[10:17]
    

    【讨论】:

      【解决方案2】:

      也许不会

      hdr1, hdr2 = conts[0:6], conts[10:7]
      

      但是:

      hdr1, hdr2 = conts[0:6], conts[7:10]
      

      我的意思是除了指定的负步骤(第三个参数)之外,应该首先 > 第二个索引?

      所以根据您的编辑:

      hdr1, hdr2 = conts[0:6], conts[10:17]
      

      【讨论】:

      • 是的,我的错。我实际上很困惑(我猜编程语言之间跳跃太多了)*blush*
      • @0xC0000022L 有时会发生这种情况)))
      【解决方案3】:

      conts[10:7] 你的意思可能是conts[7:10]

      【讨论】:

      • 对,第二个参数是 end index 而不是长度。 -> 头在键盘上。谢谢*blush*
      猜你喜欢
      • 1970-01-01
      • 2014-02-28
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 2016-07-30
      相关资源
      最近更新 更多