首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python存储中的嵌套循环导致奇异字典

Python存储中的嵌套循环导致奇异字典
EN

Stack Overflow用户
提问于 2019-12-20 07:36:04
回答 2查看 114关注 0票数 1

晚上好所以,

随着我继续攻读本科学位,我目前正在从事一个项目,以更多地了解Python。我试图创建一个生物信息程序,它利用马尔可夫模型提供和预测整个过程中的某些P(x)语句。我正在清理我的代码,因为我已经发现了大量的重复。我并不是想要一个答案--更多的建议,或者向一个方向的推进--让我保持积极的、以Python为中心的思维方式。

在Python中有什么方法可以让我

代码语言:javascript
复制
aa_count = markov_data_set.count('AA')
at_count = markov_data_set.count('AT')
ag_count = markov_data_set.count('AG')
ac_count = markov_data_set.count('AC')
tt_count = markov_data_set.count('TT')
ta_count = markov_data_set.count('TA')
tg_count = markov_data_set.count('TG')
tc_count = markov_data_set.count('TC')
cc_count = markov_data_set.count('CC')
ca_count = markov_data_set.count('CA')
cg_count = markov_data_set.count('CG')
ct_count = markov_data_set.count('CT')
gg_count = markov_data_set.count('GG')
ga_count = markov_data_set.count('GA')
gt_count = markov_data_set.count('GT')
gc_count = markov_data_set.count('GC')

变成更简单的东西?我读过几本关于Python的书(关于Python的Crashcourse和用Python编写科学代码的入门),我相信我可以使用循环或嵌套循环来使一些更短、更有组织的东西。我尝试过的例子如下:

代码语言:javascript
复制
di_nucleotide = ('AA', 'AT', 'AG', 'AC', 'TT', 'TA', 'TG', 'TC', 'CC', 'CA', 'CG', 'CT', 'GG', 'GA', 'GT', 'GC')
nucleotide_count = ()
nucleotide_frequency = []

for binomials in di_nucleotide:
     di_nucleotide.count()

问题是可悲的是..。我被困在那里了,这有点让人气馁。我想要的最终产品是将Var1和Var2存储到一个单独的字典文件中,我可以稍后存储或调用,同时根据需要将这两个变量分开。

代码语言:javascript
复制
di_nucleotide = ('AA', 'AT', 'AG', 'AC', 'TT', 'TA', 'TG', 'TC', 'CC', 'CA', 'CG', 'CT', 'GG', 'GA', 'GT', 'GC')
nucleotide_count = (int1, int2, int3, int4, ...)
nucleotide_frequency = ['AA':Count, 'AT'Count, 'AG'Count, ...]

这将是我在这方面的第一篇文章。我知道这可能不是寻求意见的最佳途径,但如果我可以做些什么,使我的职位在未来更好,请告诉我,以便我可以改进。

一如既往,谢谢大家,祝你们今天愉快!我期待着继续我的编码之旅。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-20 08:07:04

使用itertools.product生成对:

代码语言:javascript
复制
import itertools

bases = 'ACGT'
nucs = [''.join(pair) for pair in itertools.product(bases, repeat=2)]
# ['AA', 'AC', 'AG' ....

然后,您可以在字典理解的循环中运行该函数,替换单个调用:

代码语言:javascript
复制
counts = {nuc: markov_data_set.count(nuc) for nuc in nucs}

counts是你结果的字典。钥匙是'AA''AC'等。

票数 2
EN

Stack Overflow用户

发布于 2019-12-20 07:39:41

您可以将所有内容存储在字典中,这是动态生成的:

代码语言:javascript
复制
# initialise dictionary and total counts
nucleotide_counts = {}
total_counts = 0

# loop through dinucleotide counts
for dn in ['AA', 'AT', 'AG', 'AC', 'TT', 'TA', 'TG', 'TC', 'CC', 'CA', 'CG', 'CT', 'GG', 'GA', 'GT', 'GC']:
    # store in dictionary
    counts = markov_data_set.count(dn)
    nucleotide_counts[dn] = counts
    total_counts += counts

从那里,你可以产生频率:

代码语言:javascript
复制
frequencies = {}
for dn, counts in nucleotide_counts.items():
    frequencies[dn] = counts / total_counts   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59421457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档