You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:54:52