Python equivalent to C++ adjacency list

时间:2015-06-05 15:06:04

标签: python c++ matrix

I have decided to learn Python. I have a background in c++ so there are some challenges I have wrapping my brain around Python. My question is:

I have the following syntax in C++ and I am looking for an equivalent in Python. This is just a snippet of code. I'm not sure if I should use lists or Dicts.

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...
}

In short this builds a pointer array of arrays. Making it look like a matrix. What is the best data structures and or methods to use in converting this code to Python?

3 个答案:

答案 0 :(得分:0)

Dicts是其他语言可能称为关联数组或散列图的内容。列表是任意长度的容器。如果需要等效于数组,请使用列表。

你应该做一个介绍性的Python教程;列表和数组之间的区别非常重要,可以在那里解释。

答案 1 :(得分:0)

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中的列表可以包含数字,字符串,元组,列表,dicts,对象,简而言之,任何东西。你如何在python中使用列表取决于你。请注意我mixed_up_list中的最后一个元素。这是一个python列表。您的邻接列表可以很容易地在python列表中表示,如果没有所有的分配/释放,您必须担心C ++。

答案 2 :(得分:0)

您的代码的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(),因此您不需要在邻接列表中预先分配空间。