在问题中,我们要求从数组中删除所有偶数,因此我尝试创建一个函数:
import numpy as np
A = np.array([2,3,4,5])
def remove_even(A):
if ((A[0])/2) != int: #check if the first value is an integer when divided by 2
A = A[0:len(A)+1: 2]
return A
else:
A = A[1:len(A)+1:2]
但是,无论我的数组以偶数(即2)还是奇数(即1)开头,代码的执行只会到if
语句而不是else
语句。 {1}}。
我错过了什么?我将不胜感激任何反馈!
答案 0 :(得分:2)
在numpy中你可以使用一个布尔掩码:
A[(A % 2).astype(bool)]
返回
array([3, 5])
答案 1 :(得分:0)
如果您需要没有numpy解决方案,您可以执行以下操作。
l = [1,2,3,4,5,6,7,8]
a = [i for i in l if not i%2]
##print(a) output
##[2, 4, 6, 8]
答案 2 :(得分:0)
您的代码永远不会到达else
子句,因为if
测试始终为true。
int
,因为int
是一个类。 !=
是一个平等测试而不是成员资格测试。 4/2
不属于int
类型,因为/
运算符会产生float
结果,因此答案为2.0
。这意味着无论type(A[0]/2)
的值如何,float
始终为A[0]
。因此,测试int
成员资格的分部结果,即使做得不好,也不会做你想做的事。请改为:
if not (A[0] % 2):
如果A[0]
不是偶数,无论是整数还是浮点数,都是如此。