太长不看版
reduce(lambda x,y: [i+j for i in x for j in y], [['A','T','C','G']] * K)
K-mer介绍
引用刘尧老师在科学网博文上的介绍:
mer,其在分子生物学领域中意义为单体单元 (monomeric unit,mer)。通常用于核酸序列中的单位,代表nt或者bp,例如,100 mer DNA代表这段DNA序列单链长度100nt,或者双链长度100bp。
而k-mer则是指将核酸序列分成包含k个碱基的字符串,即从一段连续的核酸序列中迭代地选取长度为K个碱基的序列,若核酸序列长度为L,k-mer长度为K,那么可以得到L-K+1个k-mers。如下图所示,假设这里存在某序列长度为21,设定选取的k-mer长度为7,则得到(21-7+1=15)个7-mers。
原理
Reduce思想
Reduce:对于一串序列中的第一和二个元素计算出某个值(自己指定算法),用该计算结果与第三个元素计算,再用该计算结果与第四个元素进行计算……
比如计算阶乘50!,可以用reduce( lambda x, y: x * y, range(1, 50) )。range(1, 50)是从1到50的序列,这里lambda函数是将传入的两个数相乘。应用reduce之后就变成了:
res= 1 * 2
res= res * 3
res= res * 4