如何将数据按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
错误分析与解决方案
错误原因
- 行读取逻辑错误:
data[i]取的是原始字符串data的第i个字符,而非分割后的第i行,导致lines里存的是单个字符而非整行文本。 - 分组逻辑缺失:代码没有实现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)))
代码说明
- 分割行数据:
splitlines()方法将原始字符串按换行符分割,得到每行文本组成的列表,确保后续处理的是完整行。 - 分组遍历:
range(0, len(lines), 3)生成步长为3的索引,精准实现每3行一组的分组逻辑。 - 集合求交集:集合的交集操作
&可以高效计算多个字符串的共同字符,自动去重且逻辑简洁。 - 结果提取:由于题目中每组仅存在一个共同字符,用
next(iter(common))直接取出该字符即可。
内容的提问来源于stack exchange,提问作者RushHour
相关产品推荐
相关产品推荐

