我有3个列表:
import itertools
import numpy as np
a_x = list(range(0, 100))
T = list(range(100, 200))
p = np.tile(np.array([1000, 925, 850, 700, 500]), 20)
我有一个等式:
result = a_x * (p/(R*T))
每个列表的长度为100.我可以从0循环到100并使用索引访问列表中的项目并将它们传递给等式,但我确信有更简洁的方法来执行此操作。 / p>
我怎样才能编写我的函数,以便我可以传入3个列表并返回一个元组列表,其中元组的索引0是一个ID,而索引1是从等式计算的值?
EG:
# a_x, T and p are lists, R is a constant
def compute(id, a_x, T, p):
R = 0.2342344 #whatever
return id, a_x * (p/(R*T))
这会导致类似这样的事情:
> [(1, 0.213123), (2, 0.35635654), (3, 0.745345), (n, m)]
答案 0 :(得分:2)
您可以使用列表推导来完成此任务。
鉴于列表a_x
,T
,p
,您需要整齐地迭代0到100。
[ ( id , a_x[id] * (p[id] / (R * T[id]) ) for id in range(100) ]
列表推导可以将列表(0到99之间的数字列表)映射到您想要的任何内容..在这种情况下,是原始列表中值的元组和您评估的公式。
答案 1 :(得分:1)
zip
对此有好处。
result = []
for a, b, c, d in zip(ids, a_x, T, p)):
result.append(compute(a, b, c, d))
# where `ids` is the list of `id` numbers to pass to compute.
这也可以作为列表理解来完成,并且由于compute
非常简单,我们可以内联它。
R = 0.2342344
result = [(id, a * (c/(R*b))) for id, a, b, c in zip(ids, a_x, T, p)]
答案 2 :(得分:0)
这个怎么样:
def compute_list(al, bl, cl):
return [(i, compute(a,b,c)) for i, (a,b,c) in enumerate(zip(al,bl,cl))]
compute_list(a_x, T, p)
r = compute_list(a_x, T, p)
它返回一个元组列表。