如何在Python中生成字符串指定字符对的两两组合元组
问题解决
你的代码存在两个核心问题:
- 内层循环遍历的是单个字符(
enumerate(s[i+2:])会逐个取出字符串中的字符),因此c[:2]实际是单个字符,拼接后得到3字符的字符串,而非预期的4字符。 - 外层循环
range(0, len(s)-2, )缺失步长参数,默认步长为1,会导致取到重叠的双字符组(比如AG之后取GG),不符合你示例中不重叠的双字符分组要求。
修正后的代码
s = 'AGGCTTAGGATTCAAA' output = [ (s[i:i+2] + s[j:j+2], 1 / (idx + 1)) for i in range(0, len(s)-1, 2) # 步长2,取不重叠的双字符组 for idx, j in enumerate(range(i+2, len(s), 2)) # 遍历后续所有不重叠的双字符组的起始索引 ]
代码说明
- 外层循环
range(0, len(s)-1, 2):从索引0开始,每次步长2,获取所有不重叠的双字符组(如AG、GC、TT等)。 - 内层循环
enumerate(range(i+2, len(s), 2)):从当前双字符组的下一个位置开始,同样以步长2遍历后续所有双字符组的起始索引j,idx用于生成1、1/2、1/3...的数值。 - 拼接时用
s[i:i+2](当前双字符组)加上s[j:j+2](后续双字符组),得到预期的4字符字符串。
验证结果
运行代码后生成的元组列表与你给出的示例完全一致,比如第一组会生成:
('AGGC', 1), ('AGTT', 0.5), ('AGAG', 0.3333333333333333), ('AGGA', 0.25), ('AGTT', 0.2), ('AGCA', 0.16666666666666666), ('AGAA', 0.14285714285714285)
内容的提问来源于stack exchange,提问作者Riaz Hussain Khan
相关产品推荐
相关产品推荐

