【问题标题】:Python- adding up the elements in for loop based on dictionaryPython-根据字典在for循环中添加元素
【发布时间】:2026-01-09 15:30:02
【问题描述】:

我应该在下面的代码中添加或更改什么以获得查找平均读取长度的函数???我必须编写一个函数 mean_length,它接受一个参数:一个字典,其中键是读取名称,值是读取序列。该函数必须返回一个浮点数,即序列读取的平均长度。 希望有人可以帮助我: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))

【问题讨论】:

    标签: python dictionary for-loop


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      平均值是长度总和除以值的数量,所以我们这样做:

      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
      

      【讨论】:

        【解决方案3】:

        得到一个函数来计算读取的平均长度???

        python内置模块statistics有你要找的statistics.mean。当然,您需要在向所述函数中提供数据之前找到长度,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
        

        【讨论】:

        • 非常感谢你拯救了我的一天:D
        【解决方案4】:
        def mean_length(read_map):
            total_chars = 0
            for key in read_map.values():
                total_chars = total_chars + len(key)
            result = total_chars / len(read_map)
            return result
        

        我认为这是最适合初学者的代码。

        【讨论】: