检查条件并对列表中的每个元素执行操作

时间:2018-06-21 20:18:34

标签: python python-3.x list if-statement

q = np.arange(0,mt.pi,0.01)
q = q.tolist()
def qprime(q,qc):
    for x in q:
        if x < qc:
            a = cmt.sqrt(x**2-qc**2)
            return a.real
        else:
            return cmt.sqrt(x**2-qc**2)

qp = qprime(q, 0.8509)

我正在尝试创建一个名为“ qp”的列表。需要通过获取上一个列表“ q”,对“ q”中的每个元素进行平方,从“ q”中的每个元素中减去标量“ qc”,最后对每个元素求根来创建此列表。显然,此列表中的某些元素可能返回复数。如果发生这种情况,我只想要真实的部分。我不确定我的代码在做什么,但是它仅返回qp的单个值0.0。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

没有理由计算是否会有虚构部分。只需返回数字的实部即可。

from cmath import sqrt
from math import pi as PI

def qprime(x, qc):
    return sqrt(x**2 - qc**2).real

qp = [qprime(x, 0.8509) for x in np.arange(0, PI, 0.01)]

答案 1 :(得分:0)

基于您传递数组的事实,我想您想要这样做:

q = np.arange(0,mt.pi,0.01)
q = q.tolist()
def qprime(q,qc):
    for x in q:
        if x < qc:
            a = cmt.sqrt(x**2-qc**2)
            yield a.real
        else:
            yield cmt.sqrt(x**2-qc**2)

qp = [v for v in qprime(q, 0.8509)]

答案 2 :(得分:0)

return语句退出该函数。循环结束后,应将结果附加到listnp.arrayreturn上。

q = np.arange(0, mt.pi, 0.01)
q = q.tolist()

def qprime(q, qc):
    result = np.array([]) # initialize array 
    for x in q:
        if x < qc:
            a = cmt.sqrt(x**2-qc**2)
            result = np.append(result, a.real)
        else:
            result = np.append(result, cmt.sqrt(x**2-qc**2))

    return result

qp = qprime(q, 0.8509)

或者您可以通过list理解来获得相同的结果,删除函数内部的循环,因为它毫无意义:

q = np.arange(0, mt.pi, 0.01)
q = q.tolist()

def qprime(q, qc):
    if q < qc: # no need for a loop
        a = cmt.sqrt(q**2-qc**2)
        return a.real
    else:
        return cmt.sqrt(q**2-qc**2)

qp = np.array([qprime(i, 0.8509) for i in q])