Python如何将循环得到的seq3字符串存入fa_data列表变量中
你编写的列表推导式无法运行主要有两个问题:
- 遍历逻辑错误:
seq3是单次循环中生成的单个3碱基字符串,遍历seq3会拿到字符串内的单个字符,而非所有循环产出的seq3结果 - 拼接操作错误:列表无法直接和字符串通过
+拼接,且你没有在循环中实现单次seq3追加到列表的逻辑
基础修改方案
直接在原有循环基础上新增append操作即可实现需求,修改后完整代码如下:
fa_data = [] for i in mutate1.index: with open('chr2_{}.fa'.format(i), 'r') as f: fa = f.read() fa = fa.replace('\n','') seq3 = fa[-3:] fa_data.append(seq3)
运行后fa_data即为你需要的['aac', 'gtt', 'cag', 'cta', ...]格式的列表。
更高效的优化方案
如果处理的fasta文件体积较大,读取整个文件内容仅为取末尾3个字符会造成不必要的内存开销,可以直接定位到文件末尾读取尾部少量内容,过滤换行后取后3位,也可以用列表推导式简化代码结构:
def fetch_tail_3(file_path): with open(file_path, 'rb') as f: # 定位到文件末尾倒数20字节,足够覆盖可能存在的换行符和目标3个碱基 f.seek(-20, 2) content_tail = f.read().decode().replace('\n', '') return content_tail[-3:] fa_data = [fetch_tail_3(f'chr2_{i}.fa') for i in mutate1.index]
如果使用的Python版本低于3.6不支持f-string,将f'chr2_{i}.fa'替换为'chr2_{}.fa'.format(i)即可正常运行。
内容的提问来源于stack exchange,提问作者Geinkehdsk
相关产品推荐
相关产品推荐

