Python内置数据结构:列表,元组,字典,集合。
列表(list)是一组数值的组合,列表元素可以是任何类型(包括列表)。
>>> xx = ['Toney',20,11-6,[1,2]] #包括字符串,整数,列表 >>> xx ['Toney', 20, 5, [1, 2]]
操作列表包括:索引(indexing)、切片(sliceing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员。
List的索引
列表的索引就是列表的排序,列表从左到右元素索引递增,第一个元素的索引是0,列表元素是n个,最后一个元素的索引就是n-1。
>>> 'Toney'[2] 'n'
列表的负索引从右往左计数,最后一个元素的索引是-1,倒数第二个元素索引是-2
>>> 'Toney'[-1] 'y' >>> 'Toney'[-2] 'e'
还可以这样:
>>> fourth = input('year:')[3] year:2019 >>> fourth '9'
修改索引为0的元素值:
>>> aa = ['a','b','c'] >>> aa[0] = 1 >>> aa [1, 'b', 'c']
列表的切片
索引可以访问列表的某一个元素,切片可以访问列表一段范围的元素。如:months[4:9],4是切片的开始索引,9是结束索引,中间用冒号隔开。
>>> months = [ 'January','February','March', 'April','May','June', 'August','September','October', 'November','December'] >>> months[4:9] ['May', 'June', 'August', 'September', 'October'] >>> test = '1234567890abcdefg' >>> test[8:-2] '90abcde'
还可以有另外一种,起止索引可以缺失,冒号左边缺失表示从[0]开始取值,冒号右边缺失表示取后面全部。
>>> months[:] ['January', 'February', 'March', 'April', 'May', 'June', 'August', 'September', 'October', 'November', 'December'] >>> months[:3] ['January', 'February', 'March'] >>> months[7:] ['September', 'October', 'November', 'December']
列表可以合并在一起:
>>> aa = ['a','b','c']+3*['d']+['f'] >>> aa ['a', 'b', 'c', 'd', 'd', 'd', 'f']
判断是否是列表元素
>>> 'a' in ['a','b'] True >>> users = ['aaa','bbb','ccc'] >>> input('你的名字:') in users 你的名字:bbb True
遍历列表元素:for x in list:(后面跟的是冒号)
>>> for x in months[3:9]: print(x) April May June August September October
设置步长:
>>> num=[1,2,3,4,5,6,7,8,9] >>> num[0:9:1] #步长为1 [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> num[0:9:2] #步长为2 [1, 3, 5, 7, 9] >>> num[0:9:3] #步长为3 [1, 4, 7]
删除列表
删除整个列表:
>>> num=[1,2,3,4,5,6,7,8,9] >>> del num >>> num Traceback (most recent call last): File "<pyshell#204>", line 1, in <module> num NameError: name 'num' is not defined
删除列表元素:
>>> num=[1,2,3,4,5,6,7,8,9] >>> del num[0] >>> num [2, 3, 4, 5, 6, 7, 8, 9] >>> del num[2:4] >>> num [2, 3, 6, 7, 8, 9]
列表推导式:
>>> even = [2 * i for i in range(10)] >>> even [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
生成even的过程是把0~10之间的数字都乘以2变成偶数。
>>> even2 = [i for i in range(20) if i%2 == 0] >>> even2 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
生成even2的过程是从0-20之前挑选出偶数。
列表的内置函数
len()计算列表的长度(元素个数):
>>> len([1,2,3]) 3 >>> num = [i for i in range(10)] >>> len(num) 10
min()返回列表元素中的最小值。
>>> min(['b','c','d']) 'b' >>> min([5,6,7]) 5
max()返回列表元素中的最大值,列表元素必须是同一类型且可比较,比如都是数字型的,或都是字符串。
>>> max([1,2,3]) 3 >>> max(['b','c','d']) 'd'
sum()计算列表所有元素的和,其元素类型必须是数值型的(整数、浮点数)。
>>> sum([3,4,5.55])
12.55
sorted()返回一个排序的列表,但并不改变原列表。
>>> sorted([5,2,7,1,4,6,3,9,8]) [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> sorted(['d','a','f','b','c']) ['a', 'b', 'c', 'd', 'f']
list()生成一个空列表,或把其它类型数据转换成list。
>>> list() [] >>> list('hello') ['h', 'e', 'l', 'l', 'o']
切片赋值
>>> xx = list('123') >>> xx ['1', '2', '3'] >>> xx[:1] = list('abc') #将索引为1之前的元素赋值 >>> xx ['a', 'b', 'c', '2', '3']
1.append()把一个元素加到列表的尾部。
>>> x = ['a','d','c'] >>> x.append('b') >>> x ['a', 'd', 'c', 'b']
2.insert()把一个元素加到列表的特定位置。
>>> x = ['a','d','c'] >>> x.append('b') >>> x ['a', 'd', 'c', 'b'] >>> x.insert(2,'b') #将‘b’插入到索引2的位置 >>> x ['a', 'd', 'b', 'c', 'b']
3.remove()删除第一个出现的元素‘b’
>>> x = ['a', 'd', 'b', 'c', 'b'] >>> x.remove('b') >>> x ['a', 'd', 'c', 'b']
4.pop()删除并返回某个位置(索引)的元素
>>> x = ['a', 'd', 'b', 'c', 'b'] >>> x.pop(1) 'd' >>> x ['a', 'b', 'c', 'b']
5.index()返回遇到的第一个某值的索引,如果列表不包含该值则抛出错误
>>> x = ['a', 'd', 'b', 'c', 'b'] >>> x.index('b') 2 >>> x.index('g') Traceback (most recent call last): File "<pyshell#19>", line 1, in <module> x.index('g') ValueError: 'g' is not in list
6.count()返回列表中某值的个数
>>> x = ['a', 'd', 'b', 'c', 'b'] >>> x.count('b') 2 >>> x.count('a') 1
7.sort()对列表进行排序
>>> x = ['a', 'd', 'b', 'c', 'b'] >>> x.sort() >>> x ['a', 'b', 'b', 'c', 'd']
高级一点的排序,sort方法接受两个可选参数:key和reverse.
根据长度对元素进行排序,将参数key设置为函数len.
>>> x = ['abcg','axdwdge','sev','aidge'] >>> x.sort(key=len) >>> x ['sev', 'abcg', 'aidge', 'axdwdge']
只要将reverse指定为一个真值(True或False):
>>> x=list('davgslicb') >>> x ['d', 'a', 'v', 'g', 's', 'l', 'i', 'c', 'b'] >>> x.sort(reverse=True) #按照相反的熟悉对列表元素进行排序 >>> x ['v', 's', 'l', 'i', 'g', 'd', 'c', 'b', 'a'] >>> x.sort(reverse = False) >>> x ['a', 'b', 'c', 'd', 'g', 'i', 'l', 's', 'v']
8.reverse()将列表倒置
>>> x = ['a', 'd', 'b', 'c', 'b'] >>> x.reverse() >>> x ['d', 'c', 'b', 'b', 'a']
9.extend方法可以在列表的末尾一次性追加另一个序列中的多个值
>>> x = ['a', 'd', 'b', 'c', 'b'] >>> y = [1,2,3] >>> x.extend(y) >>> x ['a', 'd', 'b', 'c', 'b', 1, 2, 3]
10.copy()方法可以复制列表。
常规复制:
>>> a = list('abcdefg') >>> a ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> b = a >>> b[0]='k' >>> a ['k', 'b', 'c', 'd', 'e', 'f', 'g']
上面这种复制,a和b指向的是同一个列表,修改b列表的值,a列表的值对应也会改变。让a和b指向不同的列表,必须让b关联到a的副本。
>>> a = [1,2,3] >>> b = a.copy() >>> b[1]=7 >>> a [1, 2, 3]