如何在等式中使用列表?

时间:2017-10-17 20:25:22

标签: python python-3.x

我有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)] 

3 个答案:

答案 0 :(得分:2)

您可以使用列表推导来完成此任务。

鉴于列表a_xTp,您需要整齐地迭代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)

它返回一个元组列表。