序列基础
序列:python包含6种内建的序列,常用的有:列表、元组、字符串。列表可以修改,元组和字符串不能修改。
索引:从0开始递增,通过索引获取元素;可使用负数索引,从右至左。最后1个元素的位置编号为-1;
>>> s = 'hello' >>> print(s[-1]) o >>> print(s[5]) Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> print(s[5]) IndexError: string index out of range >>> fourth = input('Year: ')[3] Year: 2014 >>> print(fourth) 4 >>>
切片:访问一定范围内的元素,返回新的序列,原序列不变;通过冒号来隔开两个索引。
【左索引:右索引:步长】 左索引不能比右索引晚出现。不包括右边的索引元素,步长默认为1,可以为负数即从右到左提取元素。
>>> s1 = 'hello,world' >>> print(s[0:5]) hello >>> num = [1,2,3,4,5,6,7,8,9] >>> print(num[:]) [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> print(num[::2]) [1, 3, 5, 7, 9] >>> print(num[1::2]) [2, 4, 6, 8] >>> print(num[::-1]) [9, 8, 7, 6, 5, 4, 3, 2, 1] >>>
序列相加:相同类型的序列之间的操作
>>> print('hello '+'world!') hello world! >>> print([1,2,3]+[4,5,6]) [1, 2, 3, 4, 5, 6] >>> print([1,2,3]+['a','b','c']) [1, 2, 3, 'a', 'b', 'c']
乘法:
>>> print('*'*10) ********** >>> print([1,2,3]*10) [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3] >>> print((1,2,3)*10) (1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)
空列表:None是一个python内建值,表示空。用于构建空列表及其初始化
>>> lst = [None]*10 >>> print(lst) [None, None, None, None, None, None, None, None, None, None]
成员资格:in 若为真返回True,为假返回False
>>> permissions = 'rw' >>> print('ro' in permissions) False >>> subject = '$$$ Get rich now!!! $$$' >>> print('$$$' not in subject) False >>> database = [ ['zyj','a'], ['sl','b'] ] >>> username = input("user: ") user: zyj >>> password = input('pwd: ') pwd: a >>> if [username,password] in database: print('login sucess!') login sucess!
长度、最小值、最大值:len、min、max
>>> num1 = [100,300,20] >>> num2 = [1,2,3] >>> t = (1,2,3) >>> print(len(num1)) 3 >>> print(min(num1)) 20 >>> print(min(num1,num2)) [1, 2, 3] >>> print(max(num1)) 300 >>> print(max(t)) 3 >>>
list函数:适用于所有类型的序列;生成一个列表。
>>> lst1 = list("hello") >>> print(lst1) ['h', 'e', 'l', 'l', 'o'] >>> lst2 = list("12345") >>> print(lst2) ['1', '2', '3', '4', '5']
基本的列表操作:改变列表、删除元素
元素赋值,不能为不存在的元素进行赋值
>>> num3 = [1,5,6] >>> num3[1] = 2 >>> print(num3) [1, 2, 6] >>>
删除元素:del语句实现
>>> names = ['zyj','sl','zyj','py'] >>> del names[2] >>> print(names) ['zyj', 'sl', 'py']
分片赋值:
>>> name = list('python') >>> name[2:]=list('game') >>> print(name) ['p', 'y', 'g', 'a', 'm', 'e']
通过切片赋值插入新元素:在期望索引位置处赋值
>>> name = [1,5] >>> name[1:1] = [2,3,4] >>> print(name) [1, 2, 3, 4, 5] >>>
通过切片赋值来删除元素:将期望删除的位置赋值为空
>>> name = [1,2,3,4,5] >>> name[1:4] = [] >>> print(name) [1, 5] >>>
上述操作中。当步长不为1时,不能进行插入操作,不能进行非等长赋值。
列表方法
方法是一个与某些对象有紧密联系的函数, 通过对象.方法(参数)来调用
append :在列表末尾追加新的对象
>>> lst = list('hello'+'123') >>> tup = tuple('hello') >>> lst.append(tup) >>> print(lst) ['h', 'e', 'l', 'l', 'o', '1', '2', '3', ('h', 'e', 'l', 'l', 'o')] >>>
count 统计某个元素在列表中出现的次数
>>> lst = list('hello'*3) >>> print(lst.count('h')) 3
extend:在列表末尾一次性追加另一个序列中的多个值
>>> a = [1,2,3] >>> b = [4,5,6] >>> a.extend(b) >>> print(a) [1, 2, 3, 4, 5, 6] >>> a.append(b) >>> print(a) [1, 2, 3, 4, 5, 6, [4, 5, 6]]
与连接操作的区别:a + b 不会改变a的值,而extend会改变a的值,生成一个新的列表
>>> a = [1,2,3] >>> b = [4,5,6] >>> print(a + b) [1, 2, 3, 4, 5, 6] >>> print(a) [1, 2, 3] >>>
通过切片赋值实现extend的方法:
>>> a = [1,2,3] >>> b = [4,5,6] >>> a[len(a):] = b >>> print(a) [1, 2, 3, 4, 5, 6] >>>
index方法:从列表中找出某个值第一个匹配项的索引位置,若没有找到则引发异常
>>> lst = list('hello'+'1234') >>> print(lst.index('1')) 5 >>>
insert方法:用于将对象插入到列表中
>>> lst = [1,2,3,'hello'] >>> lst.insert(len(lst),4) >>> print(lst) [1, 2, 3, 'hello', 4]
同样可以使用切片赋值来实现insert方法:
>>> lst = [1,2,3,'hello'] >>> lst[4:4] = [4] >>> print(lst) [1, 2, 3, 'hello', 4]
pop方法:移除列表中的一个元素(默认最后一个),并且返回该元素的值,POP方法是唯一一个能修改列表又返回元素值(除None)的列表方法
>>> lst = [1,2,3,'hello'] >>> print(lst.pop()) hello
pop方法可以通过参数去掉特定的元素
>>> lst = [1,2,3,'hello'] >>> print(lst.pop(1)) 2 >>>
注在python中没有入栈方法,append方法类似与入栈
>>> lst = [1,2,3,'hello'] >>> lst.append(lst.pop()) >>> print(lst) [1, 2, 3, 'hello'] >>>
remove用于移除列表中某个值得第一个匹配项,移除不存在的值将返回报错。
>>> lst = [1,2,3,4,'hello',4] >>> lst.remove(4) >>> print(lst) [1, 2, 3, 'hello', 4] >>> lst.remove('he') Traceback (most recent call last): File "<pyshell#109>", line 1, in <module> lst.remove('he') ValueError: list.remove(x): x not in list >>> print(lst) [1, 2, 3, 'hello', 4] >>>
reverse方法用于将列表中的元素反向存放
>>> lst = [1,2,3,4,5] >>> lst.reverse() >>> print(lst) [5, 4, 3, 2, 1] >>> lst1 = lst[::-1] >>> print(lst1) [1, 2, 3, 4, 5] >>> print(lst) [5, 4, 3, 2, 1] >>>
sort方法用于在原位置对列表进行排序,改变原来的列表,不会返回一个排序好的副本
>>> lst = [10,5,6,2,3,8,6,4] >>> lst.sort() >>> print(lst) [2, 3, 4, 5, 6, 6, 8, 10] >>>
当用户需要一个排序好的副本,同时要保留原列表不变的操作
>>> lst = [1,4,6,3,2,9] >>> lst1 = lst[::] >>> lst1.sort() >>> print(lst) [1, 4, 6, 3, 2, 9] >>> print(lst1) [1, 2, 3, 4, 6, 9] >>>
也可以使用sorted函数实现上述需求:
>>> lst =[1,4,6,3,2,9] >>> lst1 = sorted(lst) >>> print(lst1) [1, 2, 3, 4, 6, 9] >>> print(lst) [1, 4, 6, 3, 2, 9] >>>
高级排序:sort方法中使用可选参数:key和reverse
>>> lst = ['hi','hello','you','me'] >>> lst.sort(key = len) >>> print(lst) ['hi', 'me', 'you', 'hello'] >>> lst = [1,4,6,3,2,9] >>> lst.sort(reverse = True) >>> print(lst) [9, 6, 4, 3, 2, 1] >>>
元组
元组:不可变序列
元组的创建:圆括号括起来,元素间使用逗号隔开.注意:当元组只有一个值时,也需要写逗号
>>> tup = 1,2,3 >>> print(tup) (1, 2, 3) >>> tup1 = ('hello','world') >>> print(tup1) ('hello', 'world') >>> tup3 = () >>> print(tup3) () >>> tup4 =('hello',) >>> print(tup4) ('hello',) >>> print(3*(40+2,)) (42, 42, 42) >>>
tuple函数:以一个序列作为参数,并把它转换为元组
>>> print(tuple('hello')) ('h', 'e', 'l', 'l', 'o') >>> print(tuple([1,2,3,4])) (1, 2, 3, 4) >>> print(tuple((1,2,3))) (1, 2, 3) >>>
元组的操作
>>> a = tuple('hello') >>> print(a[1]) e >>> print(a[:2]) ('h', 'e') >>> print(a) ('h', 'e', 'l', 'l', 'o') >>>