如何解决lambda行以使我的工作正常?

时间:2019-05-01 10:24:28

标签: python-3.x if-statement lambda filter

我正在尝试在lambda中创建一个if语句,但是要注意的是,我也试图将所有奇数也设置为第三个,因此lambda行忽略了i ** 3,


numbers = range(1,10)

odd_numbers_to_the_third_2 = list(filter(lambda i : i**3 if i%2!=0 else None , numbers))

在代码的第二行中,如果它是奇数,我将尝试i ** 3,但结果显示的是奇数而不使其成为** 3 我得到[1,3,5,7,9]而不是[1,27,125,343,729]

5 个答案:

答案 0 :(得分:1)

由于filter()仅检查列表项并返回满足条件的值,因此您可以使用map()来执行所需的操作:

  1. 此代码:
odd_numbers_to_the_third_2 = list(map(lambda i : i**3 if i%2!=0 else None , numbers))

具有以下输出:

[1, None, 27, None, 125, None, 343, None, 729]
  1. 或这个:
odd_numbers_to_the_third_2 = list(map(lambda i : i**3 if i%2!=0 else None , list(filter(lambda i : i%2!=0, numbers ))))

对于此输出:

[1, 27, 125, 343, 729]

答案 1 :(得分:0)

您可以理解:

>>> odd_numbers_to_the_third_2 = [i**3 for i in numbers if i%2 != 0]
>>> odd_numbers_to_the_third_2
[1, 27, 125, 343, 729]

使用filtermap

>>> odd_numbers_to_the_third_2 = list(map(lambda x: x**3, filter(lambda x: x%2 != 0, numbers)))
>>> odd_numbers_to_the_third_2
[1, 27, 125, 343, 729]

答案 2 :(得分:0)

使用map获取多维数据集,然后过滤掉None值:

odd_numbers_to_the_third_2 = list(filter(bool,map(lambda i : i**3 if i%2!=0 else None, numbers)))

或者,使用生成器表达式仅将map应用于奇数并丢弃其余数:

odd_numbers_to_the_third_2 = list(map(lambda i : i**3, (num for num in numbers if num%2!=0)))

或者根本不使用map / filter

odd_numbers_to_the_third_2 = [num**3 for num in numbers if num%2 != 0]

所有方法的输出:

[1, 27, 125, 343, 729]

答案 3 :(得分:0)

如评论filter中所述,它不会执行任何实际的转换,而只是使用您的private char[] uniqueKeyGenerator(int len) { String Capital_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String Small_chars = "abcdefghijklmnopqrstuvwxyz"; String numbers = "0123456789"; String values = Capital_chars + Small_chars + numbers; // Using random method Random rndm_method = new Random(); char[] password = new char[len]; for (int i = 0; i < len; i++) { password[i] = values.charAt(rndm_method.nextInt(values.length())); } return password; } 来决定返回什么。

相反,我将使用带条件的列表理解:

lambda

答案 4 :(得分:0)

filter()过滤并且不变换列表。 map()用于转换。

因此,您应该先过滤以获取所有奇数并映射以进行变换:

./manager.sh 
start
0: job 1
0: job 2
1: job 1
1: job 2
2: job 1
2: job 2
3: job 1
3: job 2
4: job 1
4: job 2
5: job 1
5: job 2
6: job 1
6: job 2
7: job 1
7: job 2
8: job 1
8: job 2
9: job 1
9: job 2
done

理想情况下,您应该使用经证明比list(map(lambda x: x ** 3, filter(lambda i: i % 2, numbers))) / map filter组合更有效的列表理解:

lambda