Python为多变量函数输出编写具有列表理解的嵌套循环

Python为多变量函数输出编写具有列表理解的嵌套循环,python,python-2.7,list,Python,Python 2.7,List,我在Python2.7中有以下循环 pressure = []; cycle_flow = []; gauge_val = [] for element in readout_list: if element.endswith('.dat'): v1_2_3 = extract_sensor_values(element) pressure.append(v1_2_3[0]) cycle_flow.append(v1_2_3[1])

我在Python2.7中有以下循环

pressure = []; cycle_flow = []; gauge_val = []
for element in readout_list:
    if element.endswith('.dat'):
        v1_2_3 = extract_sensor_values(element)
        pressure.append(v1_2_3[0])
        cycle_flow.append(v1_2_3[1])
        gauge_val.append(v1_2_3[2])
我试着把它写在一行中。如果函数
extract\u sensor()
仅返回一个变量,则我可以轻松使用此列表:

v1_2_3=[extract_sensor_values(element) for element in readout_list if element.endswith('.dat')]
但是,我不知道如何使用列表理解从函数中同时获得三个变量。当使用多行时,这似乎很简单,但当我尝试将其放在一行时,它就不起作用了


在列表理解中是否可以返回多个函数值?

这不是创建列表理解的目的。代码中的每个列表理解应该正好生成一个列表

您可以做的一件事是使用列表理解来获得
压力
循环流量
测量值
三元组,然后使用
zip
来“转换”结果

triples = [extract_sensor_values(element)
           for element in readout_list if element.endswith('.dat')]
pressure, cycle_flow, guage_val = zip(*triples)

但是需要注意的是,这将为
压力
循环流
变量留下
元组
(而不是原始代码中的
列表
)。

这不是创建列表理解所要解决的任务类型。代码中的每个列表理解应该正好生成一个列表

您可以做的一件事是使用列表理解来获得
压力
循环流量
测量值
三元组,然后使用
zip
来“转换”结果

triples = [extract_sensor_values(element)
           for element in readout_list if element.endswith('.dat')]
pressure, cycle_flow, guage_val = zip(*triples)

但是需要注意的是,这将为
压力
循环流量
测量值
变量留下
元组
(而不是原始代码中的
列表

正确,然后我可以用
为x输入[pressure,cycle\u flow,guage\val]:列表(x)完成它
-这为我提供了所有3个变量的列表。这不是一个一行,但涉及2行-但它的作品为我。为什么列表理解在这里不合适?@WR——因为列表理解意味着简单的转换。它将输入iterable转换为输出列表。它的设计目的不是将输入iterable转换为任意数量的输出列表。我想根本的问题是,没有人想到一种语法可以让这一点变得清晰。很可能没有明确的语法,但我想也有可能没有人认为有必要花足够的时间去思考它(现在)。正确,然后我就可以在[pressure,cycle\u flow,guage\u val]:list(x)
中用x的
来完成它-这给了我所有3个变量的列表。这不是一个一行,但涉及2行-但它的作品为我。为什么列表理解在这里不合适?@WR——因为列表理解意味着简单的转换。它将输入iterable转换为输出列表。它的设计目的不是将输入iterable转换为任意数量的输出列表。我想根本的问题是,没有人想到一种语法可以让这一点变得清晰。很可能没有明确的语法,但我想也有可能没有人认为有必要花足够的时间来思考它(现在)。还要注意,“代码行数更少”不是一个盲目的指标。诚然,有时你可以用一种语言的表达能力用更少的行来写复杂的东西,但更常见的是,人们在一行上塞得太多,导致几乎无法理解的悲伤。我同意。我们将在下面看到结果。在这种特定的情况下,如果不使其易于阅读,那么一行代码实际上是不可能的。还要注意的是,“代码行数更少”并不是一个盲目追求的指标。诚然,有时你可以用一种语言的表达能力用更少的行来写复杂的东西,但更常见的是,人们在一行上塞得太多,导致几乎无法理解的悲伤。我同意。我们将在下面看到结果。在这种特殊情况下,如果不使其易于阅读,一行代码实际上是不可能的。