将核苷酸转化为相应的DNA序列

时间:2017-10-31 12:56:25

标签: python list function bioinformatics

我正在使用python进行分配。我必须找到一个函数或程序将该列表转换为相应的DNA序列。

bases_list = ['Adenosine', 'Guanine', 'Thymine', 'Cytosine', 'Thymine', 'Adenosine', 'Guanine', 'Cytosine', 'Thymine', 'Adenosine', 'Guanine']

print(dna)

AGTCTAGCTAG  #the output

我想也许我可以制作一个定义函数来将这些基数转换成相应的字母。我怎样才能做到这一点?有任何想法吗?

PS:我最近开始学习python,所以我希望你们可以帮助我:)。

6 个答案:

答案 0 :(得分:4)

是的几个!正如你很久以前开始的那样,让我们​​做一些简单的事情:

bases_list = ['Adenosine', 'Guanine', 'Thymine', 'Cytosine', 'Thymine', 'Adenosine', 'Guanine', 'Cytosine', 'Thymine', 'Adenosine', 'Guanine']

dna = "" # You begin with the dna empty

for sequence in bases_list: # you go throw every chain
  dna += sequence[0] # you add the first letter with the op [0] of lists

print(dna) # finally print

您可以在此处阅读有关循环的基础https://wiki.python.org/moin/ForLoop

答案 1 :(得分:2)

最简洁:

print("".join([x[0] for x in bases_list]))

dna = "".join(x[0] for x in bases_list])
print(dna)

否则:

dna = ""
for base in bases_list:
    dna += base[0] . # get 1st letter from base
print(dna)

答案 2 :(得分:2)

让我们使用字符串索引和join

dna = ''.join(i[0] for i in bases_list)
print(dna)

输出:

AGTCTAGCTAG

答案 3 :(得分:2)

map怎么样?

In [276]: ''.join(map(lambda x: x[0], bases_list))
Out[276]: 'AGTCTAGCTAG'

str.join用于获取字符串的列表(或任何可迭代的)并将它们连接在一起。 map将相同的函数应用于iterable中的每个元素。

快速记录。我在终端上运行此代码,但如果您在脚本中运行此代码,请不要忘记将结果分配回另一个变量。

seq = ''.join(map(lambda x: x[0], bases_list))
print(seq)

答案 4 :(得分:0)

为了完整性,我想我会添加itemgetter https://docs.python.org/3/library/operator.html#operator.itemgetter解决方案。

在这种情况下,它获取(0)中每个元素的索引bases_list中的字符。据说它比lambda operator.itemgetter or lambda

略快且清洁
from operator import itemgetter

bases_list = ['Adenosine', 'Guanine', 'Thymine', 'Cytosine', 'Thymine',
              'Adenosine', 'Guanine', 'Cytosine', 'Thymine', 'Adenosine', 'Guanine']
dna = "".join((map(itemgetter(0),bases_list)))

print (dna)

结果:

AGTCTAGCTAG

答案 5 :(得分:0)

如果你想要一个将基本名称转换成相应字母的函数,那么你很幸运,因为它只是基本名字的第一个字母。

通过"索引"可以轻松完成字符串的第一个字母。例如:

base = "Adenosine"
letter = base[0]
# letter should now be "A"

在这样一个简单的例子中,人们可能不会费心定义一个特定的功能,但它有可能并且看起来如下:

def base2letter(base):
    """This function converts the name of a base into the corresponding letter."""
    return base[0]

现在,您可以将该功能应用于列表中的每个基本名称。在python中执行此操作的常用方法是使用" list comprehension":

letters_list = [base2letter(base) for base in bases_list]

您现在拥有的是字母列表:["A", "G", "T", "C", "T", "A", "G", "C", "T", "A", "G"]

下一步是将它们连接成一个字符串。一种有效的方法是使用为字符串定义的join方法。它将字符串粘贴在给定的连续元素之间:"_".join(["A", "B", "C"])将导致"A_B_C"。在这里你想把字母放在一起,没有任何东西,所以你必须使用空字符串:

dna = "".join(letters_list)

请注意,可以通过将新字母逐个连接到字符串的当前状态来逐步构建for循环中的字符串(请参阅https://stackoverflow.com/a/47036161/1878788)。如果python只是用来让你大致了解编程语言如何使用"命令式"这可能是你的期望。风格的工作。但是,它在python中效率不高,这就是许多答案没有使用这种技术的原因。

相关问题