这行代码的正确语法是什么?

时间:2017-02-07 16:38:28

标签: python-3.x

y_series1 = [(z/(roe * g * B * (x ** 2)))
             for z in Fh and for x in x_series]

我已分配roegB个值,zx_series是列表。

2 个答案:

答案 0 :(得分:1)

这可能是您尝试使用代码完成的任务:

Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> roe, g, B = 1, 2, 3
>>> Fh, x_series = range(10, 20), range(20, 30)
>>> y_series_1 = [z / (roe * g * B * x ** 2) for z, x in zip(Fh, x_series)]
>>> len(y_series_1)
10
>>> 

为了从Fhx_series中提取值,您应该将zip两者放在一起。如果您希望代码运行得更快,请将y_series_1的创建替换为以下两行:

>>> product = roe * g * B
>>> y_series_1 = [z / (product * x * x) for z, x in zip(Fh, x_series)]

答案 1 :(得分:0)

您的问题有点不清楚,因为您的伪代码有两种可能的解释:

  1. 如果Fhx_series是按索引彼此对应的元素列表,则可以使用zip执行单个循环,从每个列表中获取一个元素:

    y_series1 = [(z/(roe * g * B * (x ** 2))) for z, x in zip(Fh, x_series)]
    

    结果与Fhx_series的较短者的长度相同,但理想情况下,在这种情况下它们的长度相同。

  2. 您希望将一个列表的每个元素与另一个列表的每个元素相匹配。这基本上就像运行嵌套循环一样。您可以像这样生成1D结果:

    y_series1 = [(z/(roe * g * B * (x ** 2))) for z in Fh for x in x_series]
    

    结果将包含len(Fh) * len(x_series)个元素。要制作2D数组,请包含另一组括号:

    y_series1 = [[(z/(roe * g * B * (x ** 2))) for z in Fh] for x in x_series]
    

    这样,结果将是len(x_series)列表,其中包含每个元素中的len(Fh)个子列表。