python构建一个惟一的DB并计算出现的次数

2024-09-27 00:15:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读一个大文件,每行有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

我创建了这个帮助函数: 检查新行是否唯一-即rowDB中不存在。 Return 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函数来检查一行是否唯一,如果不获得行索引?你将如何建立这个数据库?谢谢!!!你知道吗


Tags: 文件false列表newifis数字数组
2条回答

你也许可以使用Counter,因为official documentation上有一些很好的例子。你知道吗

您可以使用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

相关问题 更多 >

    热门问题