0

我是 python 新手,第一次使用 python 的功能。我写了这样的代码:

def chunks(l, n):
    for i in range(0, len(l), n):
        chunk = l[i:i+n]
        G = chunk.count('G')
        C = chunk.count('C')
        A = chunk.count('A')
        T = chunk.count('T')
        G_C = G+C
        Total_G_C_A_T = G_C+A+T
        G_C_contents = ((G_C) / float(Total_G_C_A_T))*100
        GC_Window100.append(G_C_contents)
    print (GC_Window100)
chunks (list3, 100)
chunks (list3, 150)
chunks (list3, 200)

我的问题是:如何将 n 的值附加到该计算的列表中?就像我使用 GC_Window100 一样,我希望 100 应该来自函数参数,以便我可以跟踪列表,它来自哪个块。我需要多次重复此功能。和我想要的输出:

GC_Window100 = [30, 32, 31, 42]

GC_Window150 = [18, 20, 22, 20]

GC_Window200 = [15, 13, 16, 10] 。. .

有什么帮助吗?提前致谢。

4

1 回答 1

1

有几种方法可以做到这一点,但这是一种足够简单的方法。

tracked_responses = []
tracked_responses.append(chunks(list3, 100))

然后在你的chunks函数中,你返回一个像这样的元组

return (n, CS_Window100)

现在您的 tracked_responses 是一个元组列表,其中n第一个元素为输入,第二个元素为 CS_Window100 值。

此时,将函数变量重命名为 CS_Window 而不是 CS_Window100 可能是有意义的。

您的 tracked_responses 看起来像这样:

[(100, [1.2, 1.4, 45.4]), (200, [5.4, 3.4, 1.0]), ...]

如果您需要通过 的值进行访问n,则可以将此元组列表转换为字典并像这样访问。

tracked_responses_dict = dict(tracked_responses)
print tracked_responses_dict[100]

由于您是 Python 新手

这是你可以做的一些事情来整理你的代码。

  1. 使用 collections.counter

Collections.counter 是一种对可迭代(如列表)中的唯一项目进行分组和分配计数的好方法。

gcat_counts = collections.counter(chunk)
g_c = gcat_counts.get('G', 0) + gcat_counts.get('C', 0)
a_t = gcat_counts.get('A', 0) + gcat_counts.get('T', 0)

使用 get 方法将确保您获得一些价值,即使该键不存在。

所以修改后的脚本可能看起来像这样

import collections

def chunks(l, n):
    gc_window = []
    for i in range(0, len(l), n):
        chunk = l[i:i + n]
        gcat_counts = collections.counter(chunk)
        g_c = gcat_counts.get('G', 0) + gcat_counts.get('C', 0)
        a_t = gcat_counts.get('A', 0) + gcat_counts.get('T', 0)
        total_gcat = g_c + a_t
        g_c_contents = (g_c / float(total_gcat)) * 100
        gc_window.append(g_c_contents)
    return (n, gc_window)

tracked_responses = []
tracked_responses.append(chunks(list3, 100))
tracked_responses.append(chunks(list3, 150))
tracked_responses.append(chunks(list3, 200))

tracked_responses_dict = dict(tracked_responses)
print tracked_responses_dict[100]
于 2013-10-23T17:42:32.120 回答