如何在另一个表达式中使用上一个列表

时间:2019-04-28 19:41:24

标签: python list numpy

我正在尝试使用为Mf_values创建的列表在我的代码中用于P0的表达式中。我已经通过以下方式尝试过:

Mf_values=[0.8, 0.9, 1.2, 1.5]
Vinf_values=[Mf_value*(gamma*R*tatm)**0.5 for Mf_value in Mf_values]
print(Vinf_values)
P0=[(1+((gamma-1)/2)*(Mf_values**2)**(gamma/(gamma-1))]
T0=(1+((gamma-1)/2)*(Mf_values**2))*tatm

我想使用4个不同的Mf_values求解P0和T0的表达式,并将结果以类似于Vinf_values的方式保存在列表中。但是,python给了我以下错误:

P0=[(1+((gamma-1)/2)*(Mf_values**2)**(gamma/(gamma-1))]
                                                  ^
SyntaxError: invalid syntax

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您无法执行pow操作和其他尝试使用普通python列表进行的操作,可以使用numpy或执行以下操作:

Mf_values = [0.8, 0.9, 1.2, 1.5]

Vinf_values = [ Mf_value * ( gamma * R * tatm ) ** 0.5 for Mf_value in Mf_values ]

Mf_values_2 = [v ** 2 for v in Mf_values ]

tmp = [ v ** ( gamma / (gamma - 1) ) for v in Mf_values_2 ]

P0=[ v * (1 + ( ( gamma - 1 ) / 2)) for v in tmp]

tmp2 = [ v * (1 +  ( (gamma - 1) / 2 )) for v in Mf_values_2 ]

T0 = [tatm * v for v in tmp2 ]

要在值和列表之间进行加法运算,请执行以下操作:

# lst is a list and val is an number
result = [val * elem for elem in lst]

要在2个列表的元素之间进行加法运算,请执行以下操作:

# lst1 and lst2 are lists
result = [a + b for a, b in zip(lst1, lst2)]

答案 1 :(得分:0)

使用numpy可以轻松完成您想做的事情:

var source = new List<int> { 1, 2, 3, 4, 5, 11, 12, 13, 21, 22 };
var gaps = source
    .Zip(source.Skip(1), (n1, n2) => (n1, n2, gap: n2 - n1)) // Calculate the gaps
    .Where(e => e.gap != 1) // Select non sequential pairs
    .ToArray();
var gapsEx = gaps
    .Prepend((n1: 0, n2: source.First(), gap: 0)) // Add the first element
    .Append((n1: source.Last(), n2: 0, gap: 0)) // Add the last element
    .ToArray();
var results = gapsEx
    .Zip(gapsEx.Skip(1), (e1, e2) => (from: e1.n2, to: e2.n1)); // Pairwise gaps

Console.WriteLine($"Results: {String.Join(", ", results.Select(r => r.from + "-" + r.to))}");

如果确实需要列表,则只需执行以下操作即可转换为列表:

import numpy as np

# Change the below values to the correct ones
gamma = 0.5
R = 1.0
tatm = 1.0

Mf_values = np.array([0.8, 0.9, 1.2, 1.5])
Vinf_values = Mf_values * (gamma * R * tatm)**0.5
print(Vinf_values)
P0 = (1 + ((gamma - 1) / 2) * (Mf_values**2))**(gamma/(gamma - 1))
T0 = (1 + ((gamma - 1) / 2) * (Mf_values**2)) * tatm