我正在阅读一个大文件,其中每行有20个数字。 我想最终得到一个2D数组,其中每一行都是文件中唯一的一行,另外每行我都会看到它在文件中出现的次数。
所以我这样做是通过构建rowDB - 列表列表(每个子列表是文件中的20个数字行),另一个列表表示它出现的次数:
[uniq, idx] = is_unique(rowDB, new_row)
if (uniq):
rowDB.append(new_row)
num_of_occurances.append(1)
else:
num_of_occurances[idx] += 1
我创建了这个帮助功能: 检查new_row是否唯一 - 即rowDB中不存在。 返回uniq = True / False,如果返回False,则返回rowDB中行的索引。
def is_unique(rowDB, new_row):
for i in range(len(rowDB)):
row_i = rowDB[i]
equal = 1
for j in range (len(row_i)):
if (row_i[j] != new_row[j]):
equal = 0
break
if (equal):
return [False, i]
return [True, 0]
然而,当数据库很大时,需要花费大量时间。所以我的问题是最有效的方法是什么?也许使用numpy数组而不是列表? 如果是这样,也许有一个内置的numpy函数来检查一行是否是唯一的,如果没有得到行索引?你会如何建立这个数据库?感谢!!!
答案 0 :(得分:0)
你可以使用Counter,official documentation上有一些很好的例子。
答案 1 :(得分:0)
您可以使用tuple
保存每个行数据,并使用OrderedDict构建rowDB
,将行元组映射到行号,然后is_uniq
简单快捷检查为:
return new_row not in rowDB
is_uniq
将是:
def is_uniq(rowDB, new_row):
if new_row in rowDB:
return False, rowDB[new_row]
else:
return True, 0