Python基于字典在for循环中添加元素

2024-05-29 06:46:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我应该在下面的代码中添加或更改什么,以获得一个可以找到平均读取长度的函数???我必须编写一个函数,mean_length,它接受一个参数:一个字典,其中键是读取名称,值是读取序列。函数必须返回一个float,它是序列读取的平均长度。 希望有人能帮助我:D 我对python的编码非常陌生

read_map = {'Read1': 'GGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTCGTCCAGACCCCTAGC',
'Read3': 'GTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGTCGTGAACACATCAGT',
'Read2': 'CTTTACCCGGAAGAGCGGGACGCTGCCCTGCGCGATTCCAGGCTCCCCACGGG',
'Read5': 'CGATTCCAGGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTC',
'Read4': 'TGCGAGGGAAGTGAAGTATTTGACCCTTTACCCGGAAGAGCG',
'Read6': 'TGACAGTAGATCTCGTCCAGACCCCTAGCTGGTACGTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGT'}

def mean_lenght (read_map):
    print('keys : ',read_map.values())
    for key in read_map.keys():
        print(key) 
    #result = sum(...?)/len(read_map)
    return result
print(mean_lenght(read_map))

Tags: key函数代码名称mapread参数字典
3条回答

获取查找平均读取长度的函数

python内置模块statistics具有您正在寻找的^{}。当然,您需要在向所述函数中输入数据之前找到长度,对于这一点,len内置函数很有用

import statistics
read_map = {'Read1': 'GGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTCGTCCAGACCCCTAGC',
'Read3': 'GTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGTCGTGAACACATCAGT',
'Read2': 'CTTTACCCGGAAGAGCGGGACGCTGCCCTGCGCGATTCCAGGCTCCCCACGGG',
'Read5': 'CGATTCCAGGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTC',
'Read4': 'TGCGAGGGAAGTGAAGTATTTGACCCTTTACCCGGAAGAGCG',
'Read6': 'TGACAGTAGATCTCGTCCAGACCCCTAGCTGGTACGTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGT'}
print(statistics.mean(len(v) for v in read_map.values()))

输出

55.333333333333336

一个非常简单的解决方案可以是:

def mean_length(read_map):
    return sum([len(v) for v in read_map.values()]) / len(read_map)

基本上,您构建了一个元素列表,每个元素存储read_map条目的长度。然后,将所有这些长度相加,除以dict中的条目数

如果你的字典很大,那么构建一个列表可能不是最节省内存的方法。在这种情况下:

def mean_length(read_map):
    mean = 0
    for v in read_map.values(): mean += len(v)
    mean /= len(read_map)
    return mean

这样,您就不会构建任何中间列表

平均值是长度之和除以值的个数,所以让我们这样做:

sum(map(len, read_map.values()))/len(read_map)

输出:55.333

细分:

# "…" denotes the output of the previous line
read_map.values()  ->  returns the values of the dictionary
map(len, …)  -> computes the length of each sequence
sum(…)  -> get the total length
sum(…)/len(read_map)  -> divide the total length by the number of sequence = mean

作为一项功能:

def mean_length(d):
    return sum(map(len, d.values()))/len(d)
>>> mean_length(read_map)
53.33

相关问题 更多 >

    热门问题