【发布时间】:2016-10-17 14:40:17
【问题描述】:
sample = [['CGG','ATT'],['GCGC','TAAA']]
base_counts = [[Counter(base) for base in sub] for sub in sample]
#Output : [[Counter({'G': 2, 'C': 1}), Counter({'T': 2, 'A': 1})], [Counter({'C': 2, 'G': 2}), Counter({'A': 3, 'T': 1})]]
base_freqs = [[{k_v[0]:k_v[1]/len(bases[i]) for i,k_v in enumerate(count.items())} for count in counts] for counts, bases in zip(base_counts, sample)]
#Output 2 [[{'C': 0.3333333333333333, 'G': 0.6666666666666666}, {'A': 0.3333333333333333, 'T': 0.6666666666666666}], [{'C': 0.5, 'G': 0.5}, {'A': 0.75, 'T': 0.25}]]
样本是输入,Output2 是程序的最终输出。带有 base_freqs 的程序计算每对样本中“碱基”(碱基 = ATGC)的频率。输出提供了正确的答案。但是,我希望以 for 循环格式查看代码,而不是理解。
此代码最初取自here发布的答案
【问题讨论】:
-
如果有人能告诉我如何改进这个问题,而不是简单地反对它,那就太好了。
-
不是downvoter,但您的问题似乎缺少您提供的代码的输入和输出。如果您希望有人阅读和解释/给您一个 for 循环示例,为什么不告诉我们它应该做什么,让我们更容易帮助您?
-
Stack Overflow 更适合于 Here is the
for基于循环的此列表理解的重新实现之类的问题。我希望它会产生X,但它会产生Y。你能帮忙吗?,而不是像Is it possible to...这样的问题。 -
@Patrick,展示了他们尝试 - 只是尝试 - 实现
for循环等效项的尝试会使这个问题变得正确。在目前的状态下,它给人一种通常的“请为我做我的工作”的氛围......但由于每个人都决定支持它,以及一个没有任何解释的纯代码答案,我想我不得不让它通过... -
@FrédéricHamidi 感谢您的建议。我会记住,在将来发布此类问题之前发布我自己的尝试。另外,我假设一旦我自己阅读了 for 循环代码,我就能够理解其中的逻辑。但是已经回答的mos已经努力解释了从理解到for循环的转变。非常感谢!
标签: python for-loop for-comprehension