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

求助:Python实现4字符块内双字符块交换算法

解决每4字符块内双字符对交换的问题

原代码的问题

你的代码存在两处关键错误:

  1. 循环逻辑混乱:外层遍历两两字符的临时变量,内层又按4步长遍历索引,两层循环无关联,完全无法实现按4字符块交换的需求。
  2. 无效修改:x, y = y, x交换的是从zip中取出的临时变量,根本不会修改原列表data,最终返回的字符串和输入完全一致。

正确实现方案

利用Python字符串切片特性,按4字符块分割字符串,对每个块交换前2位和后2位,再拼接结果。以下是两种实现方式:

方式一:严谨处理(兼容长度非4倍数的情况)

def swap_blocks(data):
    # 移除字符串中的空格(如果有)
    cleaned_data = data.replace(" ", "")
    result = []
    # 按每4个字符为一个块遍历
    for i in range(0, len(cleaned_data), 4):
        block = cleaned_data[i:i+4]
        # 仅对完整的4字符块进行交换
        if len(block) == 4:
            swapped_block = block[2:] + block[:2]
            result.append(swapped_block)
        else:
            # 不足4个字符的块保持原样
            result.append(block)
    return ''.join(result)

方式二:简洁实现(假设字符串长度是4的倍数)

若能确保输入字符串长度始终是4的倍数,可用列表推导式简化:

def swap_blocks(data):
    cleaned_data = data.replace(" ", "")
    return ''.join([cleaned_data[i+2:i+4] + cleaned_data[i:i+2] for i in range(0, len(cleaned_data), 4)])

测试验证

  • 带空格的示例输入:如果需要保留空格分隔,可修改代码先拆分再处理:

    def swap_blocks_with_spaces(data):
        parts = data.split()
        swapped_parts = [part[2:] + part[:2] for part in parts if len(part) ==4]
        return ' '.join(swapped_parts)
    

    调用swap_blocks_with_spaces("2d14 56f2")会得到预期的"142d f256"。

  • 处理目标长字符串:

    target_str = "2d14541501158000000000001e000000190000000000030003000300030000200800e01e7c580000d462866058040908018f1d196d0ed5628660f60801001900fc1e"
    print(swap_blocks(target_str))
    

    输出开头为"142d15541501...",符合需求。

内容的提问来源于stack exchange,提问作者aleyazor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:15:47