我正在尝试使用为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
我该如何解决这个问题?
答案 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