在列表中查找奇数并使用lambda函数对它们求平方

时间:2019-04-19 20:14:04

标签: python python-3.x lambda

这是我到目前为止获得的代码。现在输出为[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))```

4 个答案:

答案 0 :(得分:2)

这里是一个非常小的修改版本:

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]

答案 1 :(得分:2)

创建f(i)的结果将立即将其丢弃。您需要将其附加到某个列表中(也不需要将filter对象消耗到列表中):

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

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

解决此问题的最佳方法是不使用列表理解,是像这样的filtermap的组合:

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

答案 2 :(得分:2)

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

=QUERY({A:B;C:D}, 
 "select Col2, count(Col2) 
  where Col2 is not null 
  group by Col2
  label count(Col2)'Count', Col2'Item'")

Python Tips on map filter reduce

答案 3 :(得分:1)

您没有将值保存在数组中,只是在打印它。

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)