[英]String slicing in python issue
我正在編寫一個簡單的程序來解碼以下給出的二進制字符串:
bin_str = "101100001101100001"
首先,如果第一個字符由“ 1”表示,則接下來的八個字符將被解碼為“ 01100001”,其中我將“ 01100001”傳遞給函數以獲取其ascii表示形式。
def convert_ascii(binary):
c = chr(int(binary, 2))
return c
將“ 01100001”傳遞給上述函數將產生“ a”,這是解碼的第一個字符。 繼續,索引9處的下一個字符也由“ 1”表示,因此接下來的八個字符也將被解碼為“ 01100001”。 傳遞到上面也會產生“ a”。
lst = []
fixed_length = 8
i = 0
while i < len(bin_str):
if binary[i] == "1":
fl_bin = binary[i+1:fixed_length+1] #issue here
ascii_rep = convert_ascii(fl_bin)
lst.append(ascii_rep)
i+=fixed_length+1
我面臨的問題是從原始bin_str中切出長度為8的特定字符串“ 01100001”,在此我嘗試通過[i + 1:fixed_length + 1]進行切片,但是在第二階段,fl_bin變成了“”下一個“ 01100001”。
希望對此有所幫助。
執行此操作的一種好方法是創建一個正則表達式,該正則表達式匹配1
后跟正好是8個1
或0
字符,然后使用re.findall()
查找字符串中此模式的所有不重疊的出現。 通過使用非捕獲組,您甚至可以使結果中不包含開頭的1
位數字(盡管如果您不這樣做,則將其切掉很簡單)。
import re
reg_ex = "(?:1)([01]{8})"
bin_str = "101100001101100001"
ascii_rep = "".join(chr(int(byte, 2)) for byte in re.findall(reg_ex, bin_str))
另外,這可以使源字符串中的組分開(用空格或單詞或任何不是1
后跟8 0
s或1
s的字符),以便於閱讀。
使用iter
及next
通過仿佛周期next
產生1
然后創建下一個8個項目的子表,它添加到主列表和重復,直到發電機被耗盡。
bin_str = "101100001101100001"
a = iter(bin_str)
lst = []
while True:
try:
b = next(a)
z = []
if b == '1':
for i in range(8):
z.append(next(a))
lst.append(''.join(z))
except StopIteration:
break
print(lst)
# ['01100001', '01100001']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.