我有一个多个偶数和奇数的数组,我如何将这个数组变成奇数元素的数组,例如: 奇数元素被忽略但偶数元素加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]
答案 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
,则保持原样。