一、list
list是python内置的有序的列表,可以随时添加和删除其中的元素
1、 定义
list_name = ["param1","param2","param3"]
2、访问
1)用索引来访问,索引从0开始
索引不可以越界,否则会报错,最后一个元素的索引是len(city) - 1
2)还可以从后开始访问 最后一个元素的索引为-1 依次类推,第一个元素的索引为-len(city)
>>>city[-1]
>>>'广州'
3、元素的追加
4、元素的插入
在city的索引1处增加 重庆
>>>city.insert(1,'重庆')
>>>city
>>>['北京', '重庆', '上海', '广州', '南京']
5、元素的删除
1)删除末尾
2)删除指定位置元素 pop(i),i为索引值
6、元素的替换
7、二维list
访问的时候 我们就可以直接 city[1][0] city[1][1]来访问 其中的元素值
二、tuple(元组)
tupe和list的最大的区别就是 tuple一旦被创建 就无法修改
1、定义
2、访问
和list是一样的 country[0],country[1]。由于tuple是不可变的,所以没有append 和insert 函数
3、 一个元素的tuple
我们发现 当tuple的元素只有一个元素的时候,python会认为括号就是小括号的功能,就会按照整数或者字符串解析,为了解决这个问题,python规定这种情况 在后面加一个逗号','就可以
4、 tuple的指向不变
你会惊讶,怎么可以变了呢??
其实在python内部,c[0],c[1]指向 1 和 2,而c[2]是指向的一个list对象,其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变.
切片操作,和基本数据类型列表的意思。list列表,相当于一个数组,不过list的长度是自动变化的而且列表元素自由的,不必每个元素都是同一种类型。list列表,相当于一个数组,不过list的长度是自动变化的而且列表元素自由的。
现在互联网发展迅速,众多行业巨头,都已经转投到人工智能领域,而人工智能的首选编程语言就是python,所以学好Python能够从事的工作还是很多的,而且前景非常不错。
我们来讨论下python的两种最重要的内置数据类型列表list和字典dict上,各种操作的复杂度。list列表数据类型常用操作性能:
1、按索引取值和赋值(v=a[i],a[i]=v)
由于列表的随机访问特性,这两个操作执行时间与列表大小无关,均为O(1)
2、列表的曾长,可以选择append()和_add_() "+"
list.append(v)的执行时间O(1)
list = list + [v],执行时间是O(n+k),因为新增了一个新的列表,其中k是被加的列表长度
举例:4种生成前n个整数列表的方法
如图:
我们可以计算一下这四个函数的耗时,如下
执行结果:
我们可以看到,4种方法运行时间差别很大,test1使用列表连接最慢,而test4使用list range最快,速度相差近200倍。
如下图,我们总结下list基本操作的性能如何:
上图可知pop()从列表末尾移除元素O(1),但是pop(i)从列表中间移除元素要O(n),为什么呢?
因为从中部移除元素,要把移除元素后面的元素全部向前挪一位,才保证了列表按索引取值和赋值很快,达到O(1)。
dict数据类型:
字典和列表不同,dict根据key找到value,而list根据index。
字典最常用的取值get和赋值set,其性能为O(1),而contain(in)操作判断字典是否存在某个key,其性能也是O(1)
list和dict的in操作对比:
设计一个性能试验,验证list中检索一个值,对比dict中检索一个值的耗时对比。如下程序:
如果如下:
可见list的in操作复杂度为O(n)
PS:大家可以去python官方的算法复杂度网站看看:
https://wiki.python.org/moin/TimeComplexity