如何在python中使列表中的所有元素奇怪?

时间:2018-02-01 17:16:38

标签: python

我有一个多个偶数和奇数的数组,我如何将这个数组变成奇数元素的数组,例如: 奇数元素被忽略但偶数元素加1;

Input_array = [3,67,2,34,55,73,96,21,13,15,16]
Output_array = [3,67,3,35,55,73,97,21,13,15,17]

这是我的代码:

Output_array = [(x+1) for x in Input_array if x%2 == 0]

但此Output_array包含(偶数元素+ 1)并非所有元素,仅[3, 35, 97, 17]

4 个答案:

答案 0 :(得分:9)

只需设置1位:

[x | 1 for x in a]

演示:

>>> a = [3,67,2,34,55,73,96,21,13,15,16]
>>> [x | 1 for x in a]
[3, 67, 3, 35, 55, 73, 97, 21, 13, 15, 17]

答案 1 :(得分:6)

正如您已经正确观察到的那样,您可以通过将1添加到偶数元素,将偶数和奇数元素的列表转换为仅奇数元素。您也知道这可以通过列表理解来完成。你的代码很接近,但不是很正确。现在,您所做的只是过滤掉新列表中的任何奇数。如果当前元素不是,则需要将其添加到新列表中:

[x + 1 if x % 2 == 0 else x for x in Input_array]

以上是列表理解产生的内容:

>>> Input_array = [3,67,2,34,55,73,96,21,13,15,16]
>>> [x + 1 if x % 2 == 0 else x for x in Input_array]
[3, 67, 3, 35, 55, 73, 97, 21, 13, 15, 17]
>>> 

答案 2 :(得分:5)

您可以使用:

[x+(not x % 2) for x in Input_array]

这项工作如下,条件为not x % 2,我们会检查数字是否为偶数(如果是偶数则为True,否则为False。由于True为整数1,而False为整数0,因此我们将1添加到值中,假设数字为偶数。

这给了我们:

>>> [x+(not x % 2) for x in Input_array]
[3, 67, 3, 35, 55, 73, 97, 21, 13, 15, 17]

或者我们可以使用按位操作:

[x-(x&1)+1 for x in Input_array]

结果又是:

>>> [x-(x&1)+1 for x in Input_array]
[3, 67, 3, 35, 55, 73, 97, 21, 13, 15, 17]

答案 3 :(得分:1)

您的声明Output_array = [(x+1) for x in Input_array if x%2 == 0]不起作用的原因是:您正在过滤列表,并且仅使用偶数元素 - 添加1。

[x+1 if x%2 == 0 else x for x in Input_array] 

处理Input_array的所有元素并将1加到偶数元素中,保留奇数元素。

[x+1 if x%2 == 0 for x in Input_array

处理Input_array的所有元素,并将偶数加1,忽略所有奇数。

[x+1 for x in Input_array if x%2 == 0] 

只处理Input_array的元素,并将偶数加1。

有什么用呢:

[x+ (x-1)% 2 for x in Input_array]

如果是偶数,(x-1) % 2将产生1并使其变为奇数,如果它已经是奇数(x-1) % 2将产生0,则保持原样。