相当于Python的c++邻接表

Python equivalent to C++ adjacency list

本文关键字:c++ Python 相当于      更新时间:2023-10-16

我决定学习Python。我有c++的背景,所以我对Python的理解有一些挑战。我的问题是

我在c++中有以下语法,我正在寻找Python中的等效语法。这只是一段代码。我不确定我应该使用列表还是字典。

int main()
{
    ...some code...
    int** matrix = 0;
    buildmatrix(vertices,matrix);
    ...some more code...
    return EXIT_SUCCESS;
}
void buildmatrix(int& vertices,int** &matrix)
{
    cout <<"Enter # of vertices -> ";
    cin >>vertices;
    matrix = new int* [vertices];       
    for(int i=0; i<vertices; i++)       
     {
      matrix[i] = new int[vertices];    
     }
     ...some more code...
}

简而言之,这构建了一个数组的指针数组。让它看起来像一个矩阵。在将此代码转换为Python时使用的最佳数据结构和方法是什么?

你的代码的Python翻译应该是:

def buildmatrix():
    vertices = int(raw_input("Enter # of vertices -> ")
    matrix = []      
    for i in range(vertices):
        matrix.append([])
    # alternatively, matrix = [[] for _ in range(vertices)]
    return vertices, matrix
def add_edge(matrix, vertex1, vertex2):
     matrix[vertex1].append(vertex2)
     matrix[vertex2].append(vertex1)

这是有效的,因为列表的元素可以是什么没有限制。这里,每个元素都是另一个列表,它可以有任意长度。你可以随时改变列表的长度,就像我们在这里使用。append()一样,所以你不需要在邻接表中预先分配空间。

字典是其他语言可能称为关联数组或哈希映射的东西。列表是任意长度的容器。如果需要与数组等价的对象,可以使用列表。

你应该做一个入门Python教程;列表和数组之间的区别是非常基本的,将在这里解释。

c++中的容器仅限于一种类型的对象。std::vector<SomeType>只能包含类型为SomeType的元素。一个std::list<SomeOtherType>只能包含SomeOtherType类型的元素。std::map<KeyType,ValueType>只能将KeyType类型的键映射到ValueType类型的值。等等。

在python中不是这样的。mixed_up_list = ["a", 1, [2, 3, 4]]没有任何问题。python中的列表可以包含数字、字符串、元组、列表、字典、对象,简而言之,任何东西。在python中如何使用列表取决于您自己。注意mixed_up_list中的最后一个元素。这是一个巨蟒列表。你的邻接表可以很容易地在python列表中表示,并且没有你在c++中所担心的所有分配/释放。