脚本原代码加解析 test.py
import sys
fn = sys.argv[1]
fi = open(fn,'r')
chr_len = {}
for line in fi:
line = line.strip()
infos2 = line.split('\t')
chr_len[infos2[0]] =int(infos2[1])
n= len(chr_len)
total_len = sum(chr_len.values())
mean_len =total_len/n
longest_id,longest_len = max(chr_len.items(),key=lambda x:x[1])
def Nx0(l,x):
'''
该函数用于计算Nx0,接受两个参数:
l : 长度列表
x : N50|N60|N70...
返回两个值:
idx : Nx0 的编号
Nx0 : Nx0 的长度
'''
l = chr_len.values() #所有染色体长度
l = sorted(l,reverse=True) #从大到小排序
p = int (x[1:])/100 #x[1:]去掉Nx0中的N,int()转换为数字
total_len = sum(l)
nx0 = idx =cumsum =0
for i,v in enumerate(l,start=1): #可以帮我们多迭代出当前循环的第几个元素
cumsum += v # 累加
if cumsum >= total_len * p:
idx = i
nx0 = v