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

如何移除两个字符串/字符列表中同索引位置的相同字符?

解决思路与实现方案

这问题核心就是逐索引对比两个序列的元素,只保留同位置不相同的元素就行。我用Python给你写具体实现,不管输入是字符串还是字符列表都能适配,毕竟Python里字符串本身就是可迭代的序列~

核心思路

  1. 用zip()(或处理不等长的zip_longest)把两个输入的同索引元素一一配对;
  2. 遍历每一对元素,过滤掉那些相等的元素对;
  3. 把过滤后的元素分别整理成对应输入类型的结果(字符串拼接成字符串,列表就返回新列表)。

基础实现(假设输入长度相同)

这个版本适配你给出的示例场景,默认两个输入长度一致:

def filter_same_index_chars(a, b):
    # 过滤同索引相同的元素对
    filtered_pairs = [(char_a, char_b) for char_a, char_b in zip(a, b) if char_a != char_b]
    # 拆分元素对为两个独立序列
    filtered_a, filtered_b = zip(*filtered_pairs) if filtered_pairs else ([], [])
    
    # 根据输入类型返回对应格式的结果
    if isinstance(a, str):
        return ''.join(filtered_a), ''.join(filtered_b)
    else:
        return list(filtered_a), list(filtered_b)

# 测试示例1
str1, str2 = "hello", "sello"
res1, res2 = filter_same_index_chars(str1, str2)
print(res1)  # 输出: h
print(res2)  # 输出: s

# 测试示例2
str3, str4 = "sony", "nani"
res3, res4 = filter_same_index_chars(str3, str4)
print(res3)  # 输出: soy
print(res4)  # 输出: nai

# 测试字符列表输入
list1 = ["h","e","l","l","o"]
list2 = ["s","e","l","l","o"]
res_list1, res_list2 = filter_same_index_chars(list1, list2)
print(res_list1)  # 输出: ['h']
print(res_list2)  # 输出: ['s']

进阶实现(支持不等长输入)

如果你的输入可能存在长度不一致的情况,可以用itertools.zip_longest来处理,超出较短序列长度的元素会全部保留:

from itertools import zip_longest

def filter_same_index_chars(a, b):
    filtered_a = []
    filtered_b = []
    
    for x, y in zip_longest(a, b, fillvalue=None):
        if x != y:
            # 处理其中一个序列已遍历完的情况
            if x is not None:
                filtered_a.append(x)
            if y is not None:
                filtered_b.append(y)
    
    # 根据输入类型返回结果
    if isinstance(a, str):
        return ''.join(filtered_a), ''.join(filtered_b)
    else:
        return filtered_a, filtered_b

# 测试不等长输入
str_short = "abc"
str_long = "abcdxyz"
res_short, res_long = filter_same_index_chars(str_short, str_long)
print(res_short)  # 输出: abc
print(res_long)  # 输出: dxyz

关键细节说明

  • zip(a, b)会将两个序列的同索引元素配对,当序列长度不同时,会以较短的序列为准截断;
  • zip_longest则会遍历到最长的序列结束,缺少的元素用fillvalue指定的值填充(这里用None标记);
  • 函数会自动识别输入类型,字符串输入返回字符串结果,列表输入返回列表结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:28:51