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

AHA*_*HAD 0 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]
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

Output_array = [(x+1) for x in Input_array if x%2 == 0]
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ann 9

只需设置1位:

[x | 1 for x in a]
Run Code Online (Sandbox Code Playgroud)

演示:

>>> 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]
Run Code Online (Sandbox Code Playgroud)


Chr*_*ean 6

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

[x + 1 if x % 2 == 0 else x for x in Input_array]
Run Code Online (Sandbox Code Playgroud)

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

>>> 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]
>>> 
Run Code Online (Sandbox Code Playgroud)


Wil*_*sem 5

您可以使用:

[x+(not x % 2) for x in Input_array]
Run Code Online (Sandbox Code Playgroud)

这个工作如下,在条件下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]
Run Code Online (Sandbox Code Playgroud)

或者我们可以使用按位运算:

[x-(x&1)+1 for x in Input_array]
Run Code Online (Sandbox Code Playgroud)

结果又是:

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