我正在编写一个程序,该程序通过FASTQ文件进行读取,并给出该文件中每个序列的N值。我设法得到了每行N的数量,并把它们放在了一个列表中。问题是,我需要一个列表中的所有数字与文件中N的总数相加,但它们会打印在自己的列表中。
C:UsersZokidsDesktop>N_counting.py test.fastq
[4]
4
[3]
3
[5]
5
这是我的输出,列表和列表中的总金额。我见过手动组合列表的方法,但一个列表可以有数百个序列,所以这是不可行的。
def Count_N(line):
'''
This function takes a line and counts the anmount of N´s in the line
'''
List = []
Count = line.count("N") # Count the amount of N´s that are in the line returned by import_fastq_file
List.append(int(Count))
Total = sum(List)
print(List)
print(Total)
这就是我的代码,另一个函数选择行。
我希望有人能帮我。提前谢谢。
您在函数中定义的List
永远不会得到多个项,因此它不是很有用。相反,您可能应该将函数的计数return
,并让调用代码(可能在某种循环中运行)将值append
放到自己的列表中。当然,由于函数没有太多内容,您也可以将其内容移到循环中!
例如:
list_of_counts = []
for line in my_file:
count = line.count("N")
list_of_counts.append(count)
total = sum(list_of_counts)
从代码中可以看出,每次调用count_N()都会发送一行。您声明的列表是一个本地列表,每次调用函数时都会重新初始化。您可以使用声明列表为全局
global List =[]
我认为您还需要在函数外部声明列表,以便全局访问它。
此外,如果您在函数之外合计列表,效果会更好。现在你们正在对函数内部的列表进行总结。为此,您需要将缩进与函数声明相匹配。