[英]How to get the last byte item from a bytes list in Python?
我有一個字節列表,想要獲取最后一項,同時保留其字節類型。 使用 [-1] 它給出一個 int 類型,所以這不是一個直接的解決方案。
示例代碼:
x = b'\x41\x42\x43'
y = x[-1]
print (y, type(y))
# outputs:
67 <class 'int'>
對於任意索引,我知道該怎么做:
x = b'\x41\x42\x43'
i = 2 # assume here a valid index in reference to list length
y = x[i:i+1]
print (y, type(y))
# outputs:
b'C' <class 'bytes'>
可能我可以計算列表長度,然后指向一個絕對長度為 1 的數字,而不是相對於列表結尾。
但是,有沒有更優雅的方法來做到這一點? (即類似於簡單的 [-1]) 我也無法想象如何從列表末尾反向調整 [i:i+1] 原則。
我認為您感興趣的方法有多種:
someBytes[-1:]
編輯:我只是隨機決定詳細說明發生了什么以及為什么會這樣。 A bytes object 是不可變的任意 memory 緩沖區,因此 bytes object 的單個元素是一個字節,最好用 int 表示。 這就是為什么 someBytes[-1] 將是緩沖區中的最后一個 int 的原因。 當您出於任何原因(模式匹配、處理 ascii 數據並且不費心轉換為字符串)將字節 object 用作字符串時,這可能會違反直覺,因為 python 中的字符串(或迂腐的 str)代表文本數據的概念,並且不依賴於任何特定的二進制編碼(盡管它默認為 UTF-8)。 所以“hello”的最后一個元素是“o”,它是一個字符串,因為 python 沒有單個字符類型,只有長度為 1 的字符串。因此,如果您將字節 object 視為 ZCD69B4957F06CD818D7BF3D61980E2 you're treating it like a string you want a bytes object of length 1. So this line tells python to return a slice of the bytes object from the last element to the end of the bytes object which results in a slice length one containing only字節 object 和字節 object 中的最后一個值是字節 object。
您可以將該 int 簡單地轉換回bytes
object:
>>> z = bytes([y])
>>> z == b'C'
True
...如果您無法輕松地將值作為整數獲取,例如因為另一個 function 您無法控制以這種方式返回它們。
如果你有:
x = b'\x41\x42\x43'
然后你會得到:
>>> x
b'ABC'
正如你所說, x[-1] 會給你 Ord() 值。
>>> x[-1]
67
但是,如果您想獲得 this 的值,您可以給出:
>>> x.decode()[-1]
'C'
如果您確實想獲得值 43,那么您可以按如下方式給出:
>>> "{0:x}".format(x[-1])
'43'
上面的例子
>>> z = bytes([y])
>>> z == b'C'
True
同樣你可以得到
x.strip()[-1:]
Output
b'C'
所以,
bytes(b'\x41\x42\x43')
給
b'ABC'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.