【问题标题】:Find odd numbers in a list and square them using lambda function在列表中查找奇数并使用 lambda 函数将它们平方
【发布时间】:2019-04-19 20:14:03
【问题描述】:

这是我目前得到的代码。现在输出是[1, 3, 5, 7, 9]

N = 10
for i in range(1, 10):
    arr.append(i)

arr2 = []
f = lambda x: x ** 2
arr2 = filter(lambda x: x % 2 != 0, arr)
map(lambda x: x ** 2, arr2)
print(list(arr2))```

【问题讨论】:

  • 为什么使用 lambda 而不是列表理解?
  • @Error-SyntacticalRemorse 这就是任务。
  • 您的filter 部分正确。第二部分可能应该使用map 以类似的方式完成。
  • 您应该只返回奇数平方还是返回原始列表以及原始偶数和平方奇数?
  • @MarkMeyer 只有奇数。

标签: python python-3.x lambda


【解决方案1】:

您的最后一个 for 循环将 lambda 函数应用于列表中的元素,但不保存结果。 试试:

a = [i for i in range(1,10)]
a2 = filter(lambda x: x % 2 != 0, a)
a3 = map(lambda x: x**2, a2)        # This is a generator object
final_list = list(a3)               # This is a list

Python Tips on map filter reduce

【讨论】:

  • 最后添加对list的调用,否则OP在尝试print(a3)时会感到困惑。
【解决方案2】:

您在创建 f(i) 的结果后就将其丢弃。您需要将其附加到某个列表(另外,无需将 filter 对象消耗到列表中):

result = []
for i in arr2:
    result.append(f(i))

请注意,根据PEP 8,不鼓励将 lambda 绑定到标识符。

解决此问题的最佳方法是不使用列表推导式是 filter 和 map 的组合,如下所示:

arr2 = list(map(lambda x: x ** 2, filter(lambda x: x % 2 != 0, arr)))

【讨论】:

    【解决方案3】:

    这是一个略微修改过的版本:

    arr = []
    N = 10
    for i in range(1, N):
        arr.append(i)
    
    arr2 = []
    f = lambda x: x ** 2
    arr2 = filter(lambda x: x % 2 != 0, arr)
    for i in list(arr2):
        print(f(i))
    

    arr2 不是一个列表。这是一个iterator,您只能将其转换为列表一次。

    这是一个更紧凑的版本:

    N = 10
    arr = range(1, N)
    
    square = lambda x: x ** 2
    keep_odd = lambda x: x % 2 != 0
    arr2 = list(filter(keep_odd, arr))
    for i in arr2:
        print(square(i))
    
    print(arr2)
    

    它输出:

    1
    9
    25
    49
    81
    [1, 3, 5, 7, 9]
    

    【讨论】:

      【解决方案4】:

      你没有保存数组中的值,你只是打印它。

      N = 10
      for i in range(1, 10):
          arr.append(i)
      
      result = []
      f = lambda x: x ** 2
      arr2 = filter(lambda x: x % 2 != 0, arr)
      for i in arr2:
          result.append(f(i))    
      print(result)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-22
        • 1970-01-01
        • 2015-02-12
        • 1970-01-01
        • 1970-01-01
        • 2017-03-26
        相关资源
        最近更新 更多