Python 下三角矩阵

Python 下三角矩阵,python,python-3.x,Python,Python 3.x,我正在尝试创建一个没有导入的模型(尽管我在开始时使用了数学导入)。我编写的函数获取一个DNA序列列表,并对它们进行比较,然后在列表中输入一个浮点数。然而,问题是我意外地创建了上三角形。这是我的代码(我将包括其他函数,以便它可能有意义): 它输出: [[0.08833727674228764, 0.30409883108112323, 0.6081976621622466], [0.4408399986765892, 0.8239592165010822], [0.188485821210

我正在尝试创建一个没有导入的模型(尽管我在开始时使用了数学导入)。我编写的函数获取一个DNA序列列表,并对它们进行比较,然后在列表中输入一个浮点数。然而,问题是我意外地创建了上三角形。这是我的代码(我将包括其他函数,以便它可能有意义):

它输出:

[[0.08833727674228764, 0.30409883108112323, 0.6081976621622466], 
 [0.4408399986765892, 0.8239592165010822], 
 [0.18848582121067953], 
 []]
但我希望它能输出:

[[], 
 [0.08833727674228764], 
 [0.30409883108112323, 0.4408399986765892], 
 [0.6081976621622466, 0.8239592165010822, 0.18848582121067953]]

sequence\u difference
返回两个序列在频率上的不同程度。
jukes\u-cantor
返回序列在进化过程中实际变化量的正确估计值。

打印此行矩阵。在该for循环
下方追加([]),用于范围(i+1,len(seq的列表)):矩阵[i]。追加(jukes\u-cantor(sequence\u-difference(sequence\u-of-seq[j],list\u-of-seq[i])


当前,它在上面,因此它是首先执行的。

只需反转
i
j
的索引即可:

from math import log

def sequence_difference(seq1, seq2):
    counter = 0

    if len(seq1) == len(seq2):
        for i in range(len(seq1)):
            if seq1[i] != seq2[i]:
                counter += 1
        return counter / len(seq1)

    else:
        return ''

def jukes_cantor(diff):
    K = -(3/4) * log(1 - (4/3) * diff)
    return K

def lower_trian_matrix(list_of_seq):
    matrix = [[]]

    for i in range(1, len(list_of_seq)):
        matrix.append([])

        for j in range(i):
            matrix[i].append(jukes_cantor(sequence_difference(list_of_seq[j], list_of_seq[i])))     
    return matrix

sequences = ['TAAAAAAAAAAA',
             'TTAAAAAAAAAA', 
             'AAAAAAAAAAGG', 
             'AAAAAAAAGGGG']

print(lower_trian_matrix(sequences))

或者,将其重命名为
def upper\u trian\u matrix(以下列表):
并告诉您的老师,您一直想创建上三角形。

“不导入(尽管我在开始时使用数学导入)”-?你是说没有第三方图书馆吗?如果您有导入,请将它们包含在上面的代码中,因此这是一个错误。你也没有提供输入。我们应该如何运行这个?我不使用任何库。这是一个学校的项目,我们不允许使用图书馆,除了数学图书馆。我在一开始就用这个:从数学导入日志中,请用必要的信息回答问题,我希望现在更容易看。:)这是可以理解的。你是新来的,我很乐意帮忙!试着从我对你的问题所做的编辑中学习一个问题应该是什么样子的,并确保(再次)复习一些基本的东西,以及如何提供答案。你也可以坐飞机。祝你好运现在它返回:[[0.08833727674228764,0.30409883108112323,0.60819776621622466],[0.4408399986765892,0.8239592165010822],[0.18848582121067953],[],[],[]。@RuneToft请参见
from math import log

def sequence_difference(seq1, seq2):
    counter = 0

    if len(seq1) == len(seq2):
        for i in range(len(seq1)):
            if seq1[i] != seq2[i]:
                counter += 1
        return counter / len(seq1)

    else:
        return ''

def jukes_cantor(diff):
    K = -(3/4) * log(1 - (4/3) * diff)
    return K

def lower_trian_matrix(list_of_seq):
    matrix = [[]]

    for i in range(1, len(list_of_seq)):
        matrix.append([])

        for j in range(i):
            matrix[i].append(jukes_cantor(sequence_difference(list_of_seq[j], list_of_seq[i])))     
    return matrix

sequences = ['TAAAAAAAAAAA',
             'TTAAAAAAAAAA', 
             'AAAAAAAAAAGG', 
             'AAAAAAAAGGGG']

print(lower_trian_matrix(sequences))