簡體   English   中英

切片字符串時Python中的奇怪行為-返回空字符串?

[英]Weird behavior in Python when slicing a string - returns empty string?

我有一個變量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。

之所以是空字符串,是因為您沒有提到要進行切片時需要負向步驟,假設您確實想向后切片。

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]

也許不吧

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

但:

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

我的意思是應該指定切片中的第一個>第二個索引,但指定負步(第三個參數)除外?

因此,根據您的修改:

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

conts[10:7]您可能是指conts[7:10]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM