我有一个这样的数组:
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"是您的原始数组。