Python为多变量函数输出编写具有列表理解的嵌套循环
我在Python2.7中有以下循环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])
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转换为任意数量的输出列表。我想根本的问题是,没有人想到一种语法可以让这一点变得清晰。很可能没有明确的语法,但我想也有可能没有人认为有必要花足够的时间来思考它(现在)。还要注意,“代码行数更少”不是一个盲目的指标。诚然,有时你可以用一种语言的表达能力用更少的行来写复杂的东西,但更常见的是,人们在一行上塞得太多,导致几乎无法理解的悲伤。我同意。我们将在下面看到结果。在这种特定的情况下,如果不使其易于阅读,那么一行代码实际上是不可能的。还要注意的是,“代码行数更少”并不是一个盲目追求的指标。诚然,有时你可以用一种语言的表达能力用更少的行来写复杂的东西,但更常见的是,人们在一行上塞得太多,导致几乎无法理解的悲伤。我同意。我们将在下面看到结果。在这种特殊情况下,如果不使其易于阅读,一行代码实际上是不可能的。