为什么我们不能直接将lambda函数/表达式的输出直接打印为字符串,列表或元组?

时间:2017-06-05 12:45:23

标签: python list function lambda list-comprehension

我正在使用Python 3.我正在尝试编写lambda function/expression并生成字符串类型输出。我不确定在这个问题上我不理解。

Cel = [39.5, 36.5, 37.3, 37.8]
Fer = lambda x: (float(9)/5*x for x in Cel + 32)
print(Fer)

打印:

<function <lambda> at 0x7fafc369eea0>

但是,我希望值列表为:

[103.1, 97.70, 99.14, 100.03]

然后我尝试用lambda映射

Fer2 = map(lambda x: (float(9)/5)*x + 32, Cel)
print(Fer2) # prints:
<map object at 0x7fafc36b5b38> # still no success

for x in Fer:
    print(x)  # this doesn't work and gives following error
TypeError: 'function' object is not iterable

for x in Fer2:
    print(x) # but this works and prints
             103.10
             97.7
             99.14
             100.039

为什么我不能将print(Fer or Fer2)简单地作为值列表,例如: [103.1,97.70,99.14,100.03]

如何在lambda中解决这个问题,而不另外编写def function

4 个答案:

答案 0 :(得分:6)

不完全确定为什么你需要lambda这是一个简单的列表理解

Fer = list(map(lambda x: (float(9)/5*x + 32),Cel))

或者如果你想使用lambda,你将不得不使用map

list

由于您正在迭代Fer,因此可以省略Fer = map(lambda x: (float(9)/5*x + 32),Cel)

Fer

您当前的尝试基本上是尝试混合地图和列表推导。为了进一步说明,你在下一行代码中所做的是创建一个lambda函数并将其分配给一个名为Fer = lambda x: (float(9)/5*x for x in Cel + 32) 的变量,这不是你想要的。

{{1}}

答案 1 :(得分:3)

你的问题与lambda无关,如果你使用的函数会遇到同样的问题 - map会返回一个对象,这是一个 iterable ,即。它可以转换为值列表,但不是值列表。要打印此类列表,您必须明确要求创建它:

print(list(map(lambda x: (float(9)/5)*x + 32, Cel)))

答案 2 :(得分:1)

我个人更喜欢使用带有定义函数的map而不是lambda

def func(e):
    return float(((9/5)*e)+32)

此外,如果你想在Python 3中使用map()创建一个列表或元组,你必须放入列表(或元组(在map()之前

Cel = [39.5, 36.5, 37.3, 37.8]
Fer = list(map(func,Cel))
print (Fer)

此外,在这种情况下,列表理解似乎更快(可能是因为Cel很短,超长列表和许多函数调用地图会稍微快一点):

import time
Cel = [39.5, 36.5, 37.3, 37.8]

def func(e):
    return float(((9/5)*e)+32)

st = time.time()
for i in range(1000000):
    Fer = [32+float(9)/5*x for x in Cel]
end = time.time()
print ('COMP TIME: '+str(end-st))

st = time.time()
for i in range(1000000):
    Fer = list(map(func,Cel))
end = time.time()
print ('MAP TIME: '+str(end-st))

结果:

COMP TIME: 1.8918001651763916
MAP TIME: 2.031294584274292

答案 3 :(得分:0)

所以我们在这里:P 这甚至可以工作:)

print((lambda x, y: (x + y,x * y))(5, 3))