如果元素出现numpy的偶数次,请从数组中删除它们



我有一个这样的数组:

A = [0,0,3,6,6,7,8,11,11,22]

我想删除数组中出现偶数次的元素,这样你就可以得到:

res = [3,7,8,22]

这可能使用numpy吗?

实际上,这种类型的数组操作不需要numpy。我试着使用纯python。

def removeevencountelements(listarg) :
minelement = min(listarg)
maxelement = max(listarg)
uniqueelementsset = set(listarg)
outputlist = [ ]
for i in range(0 , len(uniqueelementsset)) :
if ((listarg.count((list(uniqueelementsset)[i]))) % 2 == 1) :
for i2 in range((listarg.count((list(uniqueelementsset)[i])))) :
outputlist.append((list(uniqueelementsset)[i]))
return outputlist

A = [1,1,1,2,2,3,5,7,8,9,10,10,10,10,12,12,12,15,1]
print(removeevencountelements(A))

另一种实现方法,使用字典(在所有元素上最多循环两次(:

def f1(arr):
result = []
counter_dict = {}
for num in arr:
if num in counter_dict:
counter_dict[num] += 1
else:
counter_dict[num] = 1
for key in counter_dict:
if counter_dict[key] % 2 == 1:
result.append(key)
return result

编辑:如果你需要保留阵列的所有原始外观,那么这是有效的:

def f2(arr):
result = []
counter_dict = {}
for num in arr:
if num in counter_dict:
counter_dict[num] += 1
else:
counter_dict[num] = 1
for key in counter_dict:
if counter_dict[key] % 2 == 1:
result.extend([key]*counter_dict[key])
return result
input: A = [0,0,3,6,6,7,8,11,11,22,22,22]
output f1: [3,7,8,22]
output f2: [3,7,8,22,22,22] 

这里有一个非常简单的方法来实现这一点:

resultArray = [a for a in arr if arr.count(a) % 2 != 0]

其中"arr"是您的原始数组。

最新更新