代码之家  ›  专栏  ›  技术社区  ›  Schadre

我如何使用lambda的map函数将下面的列表从摄氏度转换为华氏度?

  •  -1
  • Schadre  · 技术社区  · 3 年前

    我一直在努力转换这个列表,因为它里面有一个元组,而操纵元组并不容易,因为本质上它们是不可更改的。但显然有办法解决这个问题,因为我可以调整数字,但我不能带回一个字符串来制作一个新的列表。我在尝试时收到此错误:

      Traceback (most recent call last):
      File "/Users/Swisha/Documents/Coding Temple/Python VI/tupe.py", line 4, in <module>
      newplaces = list(map(lambda c:  c[0] (9/5) * c[1]+ 32, places))
      File "/Users/Swisha/Documents/Coding Temple/Python VI/tupe.py", line 4, in <lambda>
      newplaces = list(map(lambda c:  c[0] (9/5) * c[1]+ 32, places))
      TypeError: 'str' object is not callable
    

    我的尝试没有错误:

    # F = (9/5)*C + 32
    places = [('Nashua',32),("Boston",12),("Los Angelos",44),("Miami",29)]
    
    newplaces = list(map(lambda c: c[0] (9/5) * c[1]+ 32, places))
    print(newplaces)
    

    我不带字符串的输出:

    [89.6, 53.6, 111.2, 84.2]
    

    所需输出:

    [('Nashua', 89.6), ('Boston', 53.6), ('Los Angelos', 111.2), ('Miami', 84.2)]
    
    3 回复  |  直到 3 年前
        1
  •  0
  •   cottontail    3 年前

    c 是一个元组( c[0] 是地名),所以

    # return a tuple that includes the place name
    newplaces = list(map(lambda c:  (c[0], (9/5) * c[1]+ 32), places))
    print(newplaces)
    [('Nashua', 89.6), ('Boston', 53.6), ('Los Angelos', 111.2), ('Miami', 84.2)]
    
        2
  •  0
  •   Yuri Ginsburg    3 年前

    还应该包括元组的第一个元素。

    places = [('Nashua',32),("Boston",12),("Los Angelos",44), ("Miami",29)]
    
    newplaces = list(map(lambda c: (c[0],  (9/5) * c[1]+ 32), places))
    print(newplaces)
    
        3
  •  0
  •   Insung Park Liam Clarke    3 年前

    我建议使用列表理解,而不是功能性的 map() 如果不是为了学习,那么可读性很差。

    # F = (9/5)*C + 32
    places = [('Nashua',32),("Boston",12),("Los Angelos",44),("Miami",29)]
    
    newplaces = [(place, (9/5) * c + 32) for place, c in places]
    
    print(newplaces)
    
    推荐文章