如何在python中使列表中的所有元素都成为奇数?

2024-04-26 17:46:34 发布

您现在位置: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]


Tags: in元素密码forinputoutputif数组
3条回答

只需设置它们的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,将偶数和奇数元素的列表转换为仅奇数元素。你也知道这可以通过列表来完成。你的代码很接近,但不完全正确。现在,你要做的就是从新列表中过滤掉任何奇数。如果当前元素不是偶数,则需要将其添加到新列表中:

[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]
>>> 

您可以使用:

[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]

相关问题 更多 >