Python列表和VEX数组之间有很多异曲同工之处,拿它们做比较学习是很值得的一件事。
两者皆是有序的数据集合,元素有序性以及可变的特性意味着它们都可以索引取值赋值以及切片。
不同的是Python列表中元素可以是任意对象甚至是别的容器,而VEX数组必须是相同类型的数据。
可以从以下几个特性来理解与掌握它们,看完文章你会发现它们从编程角度似乎变的同根同源。
有序的
索引取值
索引改值
切片
可变的
可迭代的
列表方法和数组函数
Python列表初始化(list()是Python内置函数)
# 空列表初始化两种方法>>> l1 = []>>> l2 = list()>>> l1 == l2True>>> type(l1)>>> type(l2)>>>
VEX数组变量以及属性初始化(这里以整型数组为例,array()是VEX函数)
// 空数组变量声明int a[];int a[] = {};int a[] = array();// 空数组属性声明i[]@a;i[]@a = {};i[]@a = array();
Python索引取值
>>> l1 = [1, 2, 3.14, "andy"]>>> l1[0]1>>> l1[-1]'andy'>>>
VEX索引取值
i[]@a = {1, 2, 100};i@b = @a[0];
Python索引改值
>>> l1 = [1, 2, 3.14, "andy"]>>> l1[0] = 100>>> l1[100, 2, 3.14, 'andy']>>>
VEX索引改值
i[]@a = {1, 2, 100};@a[-1] = 200;
Python切片
>>> range(10)[::2][0, 2, 4, 6, 8]>>>
VEX切片
i[]@a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};i[]@b = @a[::2];
Python列表的方法
>>> dir([])['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']>>>
append
count
extend
index
insert
pop
remove
reverse
sort
VEX数组的函数
void append(&array[], value)
int [] argsort(value[])
[] array(...)
void insert(string &str, int index, string value)
int isvalidindex(&array[], int index)
int len(array[])
pop(&array[])
void push(&array[], value)
removeindex(&array[], int index)
int removevalue(&array[], value)
[] reorder(values[], int indices[])
void resize(&array[], int size)
[] reverse(values[])
[] slice(s[], int start, int end)
int [] sort(int values[])
i[]@a = array(1, 2, 100);append(@a, 200);
Python列表循环
>>> for i in range(10):... print(i)... 0123456789>>> >>> for index, value in enumerate(range(10, 20, 2)):... print(index, value)... (0, 10)(1, 12)(2, 14)(3, 16)(4, 18)>>>
VEX数组循环
int an_array[] = {1, 2};foreach (int num; an_array) { printf("%d\n", num);}
string days[] = {"Mon", "Tue", "Wed", "Thu", "Fri"};foreach (int i; string name; days) { printf("Day number %d is %s\n", i, name);}