簡體   English   中英

python問題中的字符串切片

[英]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個10字符,然后使用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的字符),以便於閱讀。

使用iternext通過仿佛周期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.

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