我该如何重写以给出答案列表?

时间:2018-11-20 23:01:19

标签: python

我是python和编程的新手,任何帮助将不胜感激!我在用Python编写的一段代码时遇到麻烦。我的任务是编写一个函数,计算一个特定字母出现的次数除以该顺序中字母的总数。
我的函数应该返回一个列表,其中包含每个序列的字母分数。

def calculate_let(sequences, letter):
    calculate_letNew = []
    for seq in sequences:
        len(seq)
        calculate_letNew = seq.count(letter)/len(seq)
    return calculate_letNew

到目前为止,这是我的代码。即使列表sequenceA有四个序列,输出也只给我一个一个序列的分数。

Letter_A = calculate_let(sequenceA, 'A')
print(Letter_A)

输出:0.10273972602739725

我一直在尽力解决这个问题,但是老实说,我不知道从哪里开始。

2 个答案:

答案 0 :(得分:1)

我认为您打算这样列出他们:

请注意,list.append方法会将元素添加到列表中。

def count_lett(sequences, AminoAcid):
    count_lettNew = []
    for seq in sequences:
        count_lettNew.append(seq.count(AminoAcid)/len(seq))
    return count_lettNew

作为随机建议:

Python仅使用TitleCase作为类名,所以我会选择编写这样的代码(为简单起见,保留forloop):

def count_lett(sequences, amino_acid):
    counts = [] # Although, you may consider something like fracs 
                # for "fractions" since these aren't actually counts
    for seq in sequences:
        counts.append(seq.count(amino_acid)/len(seq))
    return counts

答案 1 :(得分:0)

您可以使用list comprehension以一种非常可读和简洁的方式进行操作:

def calc_freqs(sequences, letter):
    return [seq.count(letter)/len(seq) for seq in sequences]

sequenceA = 'ALABAMA', 'MISSISSIPPI', 'UTAH', 'IDAHO'
letterA = calc_freqs(sequenceA, 'A')
print(letterA)  # -> [0.5714285714285714, 0.0, 0.25, 0.2]