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

如何将数据按3行分组并查找交集字符?解决索引越界报错

问题描述

给定如下数据集:

data="""vJrwpWtwJgWrhcsFMMfFFhFp
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
PmmdzqPrVvPwwTWBwg
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
ttgJtRGJQctTZtZT
CrZsJsPPZsGzwwsLwLmpwMDw"""

需要将数据按3行一组分组,找出每组行中的交集字符(例如第一组共同字符是r,第二组是Z)。

用户尝试的代码如下:

lines = []
for i in range(len(data.splitlines())):
    lines.append(data[i])
    for j in lines:
        new_line = [k for k in j[i] if k in j[i + 1]]
        print(new_line)  

运行后触发索引越界错误:

new_line = [k for k in j[i] if k in j[i + 1]]
IndexError: string index out of range
错误分析与解决方案

错误原因

  1. 行读取逻辑错误:data[i]取的是原始字符串data的第i个字符,而非分割后的第i行,导致lines里存的是单个字符而非整行文本。
  2. 分组逻辑缺失:代码没有实现3行一组的分组逻辑,循环逻辑混乱,无法正确处理目标分组。
  3. 交集计算逻辑错误:j[i]是取字符串j的第i个字符,而非用整行文本求交集,完全偏离需求,必然引发索引越界。

正确实现代码

data="""vJrwpWtwJgWrhcsFMMfFFhFp
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
PmmdzqPrVvPwwTWBwg
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
ttgJtRGJQctTZtZT
CrZsJsPPZsGzwwsLwLmpwMDw"""

# 按换行符分割得到每行数据的列表
lines = data.splitlines()

# 按3行一组遍历数据
for idx in range(0, len(lines), 3):
    # 提取当前组的三行
    group = lines[idx:idx+3]
    # 利用集合交集操作找出三行的共同字符
    common = set(group[0]) & set(group[1]) & set(group[2])
    # 输出结果(每组仅一个共同字符,直接取出)
    print(next(iter(common)))

代码说明

  1. 分割行数据:splitlines()方法将原始字符串按换行符分割,得到每行文本组成的列表,确保后续处理的是完整行。
  2. 分组遍历:range(0, len(lines), 3)生成步长为3的索引,精准实现每3行一组的分组逻辑。
  3. 集合求交集:集合的交集操作&可以高效计算多个字符串的共同字符,自动去重且逻辑简洁。
  4. 结果提取:由于题目中每组仅存在一个共同字符,用next(iter(common))直接取出该字符即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:35:27