任务:在数组中查找唯一元素。计算它们的出现。在5000个元素的数组中查找少于10次的数字

时间:2019-12-08 10:57:11

标签: python-3.x

我尝试了一些解决方案: 1。)

 uniqueValues, indexList,occurCount = np.unique(desired_array, 
return_index=True, return_counts=True)  
print(uniqueValues,indexList,occurCount) 

但是indexList仅给出数字的第一个出现。例如:如果num 33发生在20,56,3000,indexList将仅显示它发生在20。由于33发生的次数少于10次,即3次,因此我需要所有位置。

2。)我决定使用字典来查找所有索引位置。但这是行不通的。

for i in range(5000): 
     ...:     if not d.get(i): 
     ...:         d[desired_array[i]]=[i]   
     ...:     else:  
     ...:         indices = d[desired_array[i]]  
     ...:         indices.append(i)  

1 个答案:

答案 0 :(得分:0)

此工作为collections.Counter尖叫:

from collections import Counter

desired_array = [1, 2, 3, 1, 3, 5, 3]
result = Counter(desired_array)
print(result)

这将打印出唯一元素和出现次数:

Counter({3: 3, 1: 2, 2: 1, 5: 1})

您可以替换

for i in range(1250):
    var = desired_array[i]
    if not d.get(var):
        d[var] = []
    # print(var)
    s = d[var]
    s.append(i)

使用

for i in range(1250):
    var = desired_array[i]
    d.setdefault(var, []).append(i)

根据文档dict.setdefault(key, default)

  

如果key在字典中,则返回其值。如果不是,请插入具有默认值的密钥,然后返回默认值。默认默认为无。


要编写一个csv文件,最好使用标准的csv.Writer类:

import csv
with open('some.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(someiterable)

如果要将字典的键/值对写到csv文件中,则需要编写如下内容:

with open('some.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    for k, v in desired_array.items():
        writer.writerow((k, v))