我有一个如下列表,
plist = [[('s', [0.0, 0.1, 0.0, 0.4, 0.0]),
('aa', [0.0, 0.1, 0.0, 0.5, 0.0])],
[('m', [0.0, 0.0, 0.1, 0.3, 0.0]),
('ih', [0.0, 0.1, 0.1, 0.2, 0.0])],
[('k', [0.0, 0.1, 0.0, 0.1, 0.0]),
('l', [0.0, 0.1, 0.0, 0.6, 0.0]),
('eh', [0.0, 0.1, 0.0, 0.0, 0.0]),
('k', [0.0, 0.1, 0.0, 0.0, 0.0])],
[('t', [0.0, 0.1, 0.0, 0.1, 0.0]),
('aa', [0.0, 0.1, 0.0, 0.0, 0.0])],
[('n', [0.0, 0.1, 0.1, 0.2, 0.0]),
('ih', [0.0, 0.1, 0.1, 0.0, 0.0]),
('t', [0.0, 0.1, 0.0, 0.0, 0.0])],
[('g', [0.0, 0.1, 0.0, 0.4, 0.0]),
('eh', [0.0, 0.1, 0.0, 0.0, 0.0]),
('l', [0.0, 0.1, 0.0, 0.5, 0.0])],
[('v', [0.3, 0.0, 0.1, 0.1, 0.0]),
('ae', [0.0, 0.1, 0.1, 0.0, 0.0])],
[('n', [0.0, 0.1, 0.1, 0.2, 0.0]),
('ih', [0.0, 0.1, 0.1, 0.0, 0.0])],
[('k', [0.0, 0.1, 0.0, 0.0, 0.0]),
('aa', [0.0, 0.1, 0.0, 0.0, 0.0])],
[('p', [0.0, 0.0, 0.3, 0.0, 0.0]),
('l', [0.0, 0.1, 0.2, 0.0, 0.0])],
[('k', [0.0, 0.1, 0.1, 0.0, 0.0])]]
此列表是从函数生成的。我需要将列表中的值传递给不同的函数。由于每个内部列表中有5个值,因此我有5个函数。现在我必须使用这些函数中的值,如下所示,
def lips_part_bezier(u_value) :
""" Calculating sampling points using rational bezier curve equation"""
p0 = 0.0 (1st value of 's')
p3 = 0.0 (1st value of 'aa')
p1 = p0
p2 = p3
u = u_value
p_u = math.pow(1 - u, 3) * 0.7 + 3 * u * math.pow(1 - u, 2) * 0.23 \
+ 3 * (1 - u) * math.pow(u, 2) * 0.1 + math.pow(u, 3) * 0.52
p_u = p_u * w
d = math.pow(1 - u, 3) * w + 3 * u * w * math.pow(1 - u, 2) + 3 * (1 - u) * w * math.pow(u, 2) + math.pow(u, 3) * w
p_u = p_u / d
#print "p(u) = ", p_u
return p_u
u_value从另一个函数传递。还有其他功能具有相同的操作。第二个函数采用's'和'aa'的第二个值,依此类推。这是第一次迭代。在下一次迭代中,所有函数中的p0是前一个p1,p1将是列表中的下一个值。这将继续,直到列表中没有剩余值。此外,列表在另一个函数中生成。作为初学者,对我来说这看起来有点复杂。谢谢。
答案 0 :(得分:1)
我建议您修改生成plist
的函数,以便它返回一个字符串值作为键,列表作为值的dict,或者如果您没有修改的机会则写一个新函数。这样,除了u_value
之外,您可以按照您想要的顺序将dict和迭代号作为参数传递给所有函数,并引用它们,例如: p0 = coefs['s'][iter_num]
。