Python:从等式结果创建嵌套列表

时间:2016-02-12 10:08:16

标签: python list nested-loops

我是Python编程的新手,我正试图让我的二次方程求解器将x1和x2的答案“收集”到嵌套列表中。

它使用正确的结果解决方程式问题,并且我能够像我想要的那样得到结果,但是我无法在循环结束时将它们收集到相同的列表中。代码如下:

from math import sqrt

abcList = [[1, 2, 1], [9, 12, 4], [1, -7, 0], [1, -2, -3]]

for abc in abcList:
    a, b, c = abc
    q = b**2 - 4*a*c

    if q > 0:
        q_sqrt = sqrt(q)
        x1 = (-b + q_sqrt)/(2*a)
        x2 = (-b - q_sqrt)/(2*a)

    elif q == 0:
        x1 = -b/(2*a)
        x2 = x1

    else:
        raise ValueError("q is negative.")

    resultList = []

    print ('x1 = ', x1)

    resultList.append(x1)

    print ('x2 = ', x2)

    resultList.append(x2)

    #print ('a = ', a, ', b = ', b, 'and c = ',c)

    print (resultList)

print ('-----')

这是我得到的结果:

x1 =  -1.0
x2 =  -1.0
[-1.0, -1.0]
x1 =  -0.6666666666666666
x2 =  -0.6666666666666666
[-0.6666666666666666, -0.6666666666666666]
x1 =  7.0
x2 =  0.0
[7.0, 0.0]
x1 =  3.0
x2 =  -1.0
[3.0, -1.0]
-----

这是我想要的结果:

x1 =  -1.0
x2 =  -1.0

x1 =  -0.6666666666666666
x2 =  -0.6666666666666666

x1 =  7.0
x2 =  0.0

x1 =  3.0
x2 =  -1.0


[[-1.0, -1.0], [-0.6666666666666666, -0.6666666666666666], [7.0, 0.0], [3.0, -1.0]]
-----

2 个答案:

答案 0 :(得分:2)

您只需稍微重新组织代码即可。在resultList循环之外初始化for,并将每对答案附加为2元素列表。

    from math import sqrt

    abcList = [[1, 2, 1], [9, 12, 4], [1, -7, 0], [1, -2, -3]]
    resultList = []

    for abc in abcList:
        a, b, c = abc
        q = b**2 - 4*a*c

        if q > 0:
            q_sqrt = sqrt(q)
            x1 = (-b + q_sqrt)/(2*a)
            x2 = (-b - q_sqrt)/(2*a)
        elif q == 0:
            x1 = -b/(2*a)
            x2 = x1
        else:
            raise ValueError("q is negative.")

        #print ('a = ', a, ', b = ', b, 'and c = ',c)
        print ('x1 = ', x1)
        print ('x2 = ', x2)
        resultList.append([x1, x2])

    print (resultList)        
    print ('-----')    

<强>输出

x1 =  -1.0
x2 =  -1.0
x1 =  -0.666666666667
x2 =  -0.666666666667
x1 =  7.0
x2 =  0.0
x1 =  3.0
x2 =  -1.0
[[-1.0, -1.0], [-0.66666666666666663, -0.66666666666666663], [7.0, 0.0], [3.0, -1.0]]
-----
顺便说一句,没有必要导入math模块只是为了做平方根:你可以使用**指数运算符,这比进行函数调用更有效。 / p>
q_sqrt = q ** 0.5

答案 1 :(得分:1)

您的问题是您正在尝试将单个组件附加到结果列表,并且您正在循环的每次迭代中将其打印出来。 resultList必须在循环之外,x1和x2必须作为一对附加到resultList。请参阅以下内容:

from math import sqrt

abcList = [[1, 2, 1], [9, 12, 4], [1, -7, 0], [1, -2, -3]]

resultList = []

for abc in abcList:
    a, b, c = abc
    q = b**2 - 4*a*c

    if q > 0:
        q_sqrt = sqrt(q)
        x1 = (-b + q_sqrt)/(2*a)
        x2 = (-b - q_sqrt)/(2*a)

    elif q == 0:
        x1 = -b/(2*a)
        x2 = x1

    else:
        raise ValueError("q is negative.")


    print ('x1 = ', x1)

    print ('x2 = ', x2)

    resultList.append( [x1, x2] )

    #print ('a = ', a, ', b = ', b, 'and c = ',c)

print (resultList)

print ('-----')