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