如何用Python从右侧将含m个字符的二进制数组分割为n字符块?
嘿,我来帮你搞定这个从右侧分割数组的需求!不管你手里的是二进制字符串还是通用的序列类型,都有简单直接的实现方式,下面分情况给你说明:
从右侧分割序列为固定长度块的Python实现
一、针对二进制数组/字符串的具体实现
假设你的二进制数据是字符串形式(比如'10110011')或者列表形式(比如['1','0','1','1','0','0','1','1']),我们可以用一个通用函数来处理:
高效实现:直接计算分割点
这个方法不需要多次反转,逻辑清晰且效率更高,是我最推荐的写法:
def split_from_right(seq, chunk_size): seq_length = len(seq) # 计算总长度除以块长度的余数,确定左侧是否有不足一块的剩余部分 remainder = seq_length % chunk_size chunks = [] # 如果有余数,先把左侧剩余的部分作为第一个块 if remainder != 0: chunks.append(seq[:remainder]) # 从余数位置开始,按块长度分割剩余部分 for i in range(remainder, seq_length, chunk_size): chunks.append(seq[i:i+chunk_size]) return chunks
测试示例
比如你有一个长度为9的二进制字符串,按3字符块从右侧分割:
binary_str = '101100110' print(split_from_right(binary_str, 3)) # 输出: ['101', '100', '110']
如果是长度为8的二进制列表:
binary_arr = ['1','0','1','1','0','0','1','1'] print(split_from_right(binary_arr, 3)) # 输出: [['1', '0'], ['1', '1', '0'], ['0', '1', '1']]
二、通用序列的右侧分割思路
上面的函数其实已经适用于所有可切片的序列类型(字符串、列表、元组等),核心逻辑非常简单:
- 先判断总长度和块长度的余数,确定左侧是否存在不足一个块的剩余部分
- 把剩余部分作为第一个块,之后的部分从左到右每
chunk_size个元素为一块,最终得到的块顺序就对应原序列从右到左的分割结果
直观实现:反转后分割再还原
如果你更喜欢用反转的逻辑来理解(虽然效率略低,但适合小序列场景),可以试试这个写法:
def split_from_right_reversed(seq, chunk_size): # 先反转整个序列,按块分割后反转每个块,最后再整体反转恢复顺序 reversed_seq = seq[::-1] reversed_chunks = [reversed_seq[i:i+chunk_size][::-1] for i in range(0, len(reversed_seq), chunk_size)] return reversed_chunks[::-1]
测试这个函数,结果和之前的高效实现完全一致:
print(split_from_right_reversed('10110011', 3)) # 输出: ['10', '110', '011']
小提示
- 如果你的二进制数组是整数类型的列表(比如
[1,0,1,1,0,0]),上面的函数同样适用,因为列表的切片操作和字符串逻辑一致 - 如果块长度
chunk_size大于序列总长度,函数会直接返回包含整个序列的单块列表
内容的提问来源于stack exchange,提问作者Zain Malik
相关产品推荐
相关产品推荐

