入门Python借助并行列表计算群体功能失调等位基因频率
问题分析与修改方案
原有代码的错误点如下:
- 变量拼写错误:
dys_nuq应为你定义的dys_nuc - 计数列表初始化错误:空列表无法直接通过索引赋值/累加,需要先按
slim_pos的长度初始化每个位置的初始计数为0 - 不需要单独存储正常计数和按variant的计数,仅需要统计每个
slim_pos位点的功能失调突变总数即可,频率计算逻辑为 该位点突变数 / 总序列数(90)
可直接运行的实现代码
# 初始化计数列表,长度和slim_pos一致,每个位置初始值为0 dys_count = [0] * len(slim_pos) total_samples = len(seqList) # 总样本数为90 for variant in seqList: for ind, pos in enumerate(slim_pos): # 比对当前序列对应位置的核苷酸是否为功能失调核苷酸 if variant[pos] == dys_nuc[ind]: dys_count[ind] += 1 # 按要求格式输出结果 print("| 功能失调序列位点(对应slim_pos) | 功能失调核苷酸 | 该位点携带功能失调核苷酸的人群频率 |") print("| :--- | :---: | ---: |") for ind, pos in enumerate(slim_pos): freq = dys_count[ind] / total_samples print(f"| {pos} | {dys_nuc[ind]} | {freq} |")
如果运行仍出现索引错误,请检查所有序列的长度是否大于slim_pos中的最大索引值,避免出现序列越界访问。
内容的提问来源于stack exchange,提问作者user8903149
相关产品推荐
相关产品推荐

