Python数据结构决策的性能测试

Python数据结构决策的性能测试,python,Python,我经常在这样一个路口,但我永远无法做出一个明确的决定。所以我希望有人能解释一下如何“测试”简单的设计决策,以及在这种情况下什么会更好 我需要一个数据结构来存储与“类别”对应的“边缘ID”和“边缘权重” 我可以用两种方式存储它: a) (边长,重量)各类别的对 { cat1: [(3,4),(5,7),(6,9)...] cat2: [(4,1),(3,6),(7,8)...] } b) 每个cat1对应的重量和边缘ID的单独列表,索引相关 { cat1: [[3,5,6...],[4,7,9.

我经常在这样一个路口,但我永远无法做出一个明确的决定。所以我希望有人能解释一下如何“测试”简单的设计决策,以及在这种情况下什么会更好

我需要一个数据结构来存储与“类别”对应的“边缘ID”和“边缘权重”

我可以用两种方式存储它:

a) (边长,重量)各类别的对

{
cat1: [(3,4),(5,7),(6,9)...]
cat2: [(4,1),(3,6),(7,8)...]
}
b) 每个cat1对应的重量和边缘ID的单独列表,索引相关

{
cat1: [[3,5,6...],[4,7,9...]]
cat2: [[4,3,7...],[1,6,8...]]
}
操作:

  • 将(边、权重)对添加到某个类别。这将涉及简单地将元组附加到(a)中的
    cat1
    列表中,并对(b)中的
    cat1
    megalist中的两个列表进行单独的附加操作

  • 获取与列表对应的所有边(!最重要!)

  • 删除边(当然是按值)和相应的权重

  • 我如何在这里做出明智的决定?我将在
    igraph
    中使用它,因此我的图可能涉及数亿个节点,因此上面的列表可能非常长,这就是为什么我要在这里记住性能


    除了从过去的知识中进行逻辑推断或得出结论外,我如何在Python中快速测试这些小东西的性能?我想在这里举个例子。

    如果您想要性能,我建议您使用numpy。使用元组和列表非常慢,numpy实际上可以处理数据结构。您正在寻找的是以下内容:

        import numpy as np
        myarray = np.zeros(desiredsizeandshape,dtype = [('edge',list),('weight',list)])
    
    现在,您将能够根据是边还是权重填充数组。例如,假设我有一个5乘5的数组:

       myarray[0,4]['edge'] = 1
       myarray[0,4]['weight'] = 5
    
    然后,如果只需要边数组,只需键入: myarray['edge']


    您将获得一个边值数组。

    要添加到jfish003的注释中,如果您也喜欢点符号,您可以将其视为一个重新排列>>>myview=myarray.view(np.recarray)>>>myview.edge和myview['edge']以及myarray['edge']将允许查看数据的多个选项