第五章 组合数据类型
序列的索引及切片操作
字符串是有序的字符序列。属于序列结构的还有列表、元组、集合和字典。其中列表和元组叫有序序列;集合和字典叫无序序列。同时列表、元组、集合和字典又是Python中的组合数据类型。
序列是一个用于存储多个值的连续空间,每个值都对应一个整数的编号,称为索引。
#正向递增索引
s='helloworld'
for i in range(0,len(s)):
print(i,s[i],end='\t\t')
print()
#反向递减索引
for i in range(-len(s),0):
print(i,s[i],end='\t\t')
print()
print(s[9],s[-1]) #对应的是同一个位置
切片操作:
注意:切片操作可以应用于所有的序列类型。“切片”指的是访问序列元素的一种方法,只不过访问的不是一个,而是一定范围内的元素。通过切片操作可以生成一个新的序列。
举例:
s='HelloWorld'
#切片操作
s1=s[0:5:2] #索引从0开始,到5结束(不包含5),步长为2
print(s1)
#省略了开始位置,start默认从0开始
print(s[:5:1])
#省略开始位置start,省略步长step。(省略步长时,步长为1)
print(s[:5:])
#省略结束位置
print(s[0::1]) #stop,默认到序列的最后一个元素(包含最后一个元素)
print(s[5::])
print(s[5:]) #这一句与上一句代码功能相同,省略了结束,省略了一个步长
#省略开始位置,省略结束位置,只写步长
print(s[::2]) #分别获取0,2,4,6,8索引位置上的元素
#步长为负数
print(s[::-1]) #可以将字符串变得逆序
print(s[-1:-11:-1]) #这句代码可以替换上一句,两句的效果一样
注意学习如何实现字符串逆序操作(在上述代码的最后两句),关键在于步长为负数:
#步长为负数
print(s[::-1]) #可以将字符串变得逆序
print(s[-1:-11:-1]) #这句代码可以替换上一句,两句的效果一样
求逆序数的操作如下:
n=1234
reverse=0
while n>0:
remain=n%10
n=n//10
reverse=reverse*10 + remain
print(reverse)
在学习了将字符串逆序的操作后,求逆序数亦可用如下方法:
n=1234
s=str(n)
s1=s[::-1]
n=int(s1)
print(n)
序列的相关操作
操作符/函数 | 描述说明 |
---|---|
x in s | 如果x是s的元素,结果为True,否则结果为False |
x not in s | 如果x不是s的元素,结果为True,否则结果为False |
len(s) | 序列s中元素的个数(即序列的长度) |
max(s) | 序列s中元素的最大值 |
min(s) | 序列s中元素的最小值 |
s.index(x) | 序列s中第一次出现元素x的位置 |
s.count(x) | 序列s中出现x的总次数 |
序列亦有相加、相乘操作。前面学过字符串相加操作,序列包括字符串、列表、元组、集合和字典。
#序列相加操作。前面学过字符串相加操作,序列包括字符串、列表、元组、集合和字典
s1='Hello'
s2='World'
print(s1+s2)
#序列的相乘操作
print(s1*5) #将对字符串s1输出5遍
print('-'*40)
其他操作:
s='helloworld'
print('e在helloworld中存在吗?',('e' in s))
print('v在helloworld中存在吗?',('v' in s))
print('e在helloworld中不存在吗?',('e' not in s))
print('v在helloworld中不存在吗?',('v' not in s))
#内置函数的使用
print('len()',len(s))
print('max()',max(s)) #最大值、最小值是按照ASCII码计算的
print('min()',min(s))
#序列对象的方法,使用序列的名称,打点调用
print('s.index():',s.index('o')) #o在s中第一次出现的索引位置 4
#print('s.index():',s.index('v')) #ValueError: substring not found,报错的原因是v在字符串中不存在,不存在所以找不到
print('s.count():',s.count('o')) #统计o在字符串s中出现的次数
列表的基本操作
整数类型、浮点数类型、字符串类型都是不可变数据类型,而列表是Python中的可变数据类型,也叫可变序列。
列表是指:
1、是指一系列的按特定顺序排列的元素组成。
2、是Python中内置的可变序列。
3、在Python中使用 [ ] 定义列表,元素与元素之间使用英文的逗号分隔
4、列表中的元素可以是任意的数据类型
列表是组合数据类型,组合数据类型的存值有很多个,而且数据类型可以不一致。
列表的创建方式有两种:
(1) 使用 [ ] 直接创建列表。
语法结构如下:
列表名=[element1,element2,…,elementN]
(2) 使用内置函数list()创建列表
语法结构如下:
列表名=list(序列)
列表的删除(语法结构如下):
del 列表名
#使用 [ ] 直接创建列表
lst=['hello','world',98,100.5]
print(lst)
#使用内置函数list()创建列表
lst2=list('helloworld')
lst3=list(range(1,10,2)) #从1开始到10结束,步长为2,不包括10
print(lst2)
print(lst3)
#列表是序列的一种,对序列的操作符,运算符,函数均可以使用
print(lst+lst2+lst3) #序列中的相加操作
print(lst*3) #序列的相乘操作
print(len(lst))
print(max(lst3))
print(min(lst3))
print(lst2.count('o')) #统计o的个数
print(lst2.index('o')) #o在列表lst2中第一次出现的位置
#列表的删除操作
lst4=[1,2,3,4,5,6,7,8,9]
print(lst4)
#删除列表
del lst4
#print(lst4) #报错NameError: name 'lst4' is not defined
enumerate函数
enumerate:枚举。
enumerate()函数使用语法结构:
for index,item in enumerate(lst):
输出index和item
注意:这里的index并不是索引,而是序号。可以手动修改序号的起始值。(index,item都是自己起的变量名)
列表的遍历操作
列表的遍历操作有三种实现方式:
1、方法一:使用for循环遍历列表元素。
2、方法二:使用列表的索引。需要用到for循环,range()函数,len()函数,根据索引进行遍历。
3、方法三:使用enumerate()函数。
#列表的遍历操作
lst = ['hello','world','python','php']
#方法一:使用for循环遍历列表元素
for item in lst:
print(item)
#方法二:使用列表的索引。需要用到for循环,range()函数,len()函数,根据索引进行遍历
for i in range(0,len(lst)):
print(i,'--->',lst[i])
#方法三:使用enumerate()函数
for index,item in enumerate(lst):
print(index,item) #index是序号,不是索引
#手动修改序号的起始值
for index,item in enumerate(lst,start=1):
print(index,item)
for index,item in enumerate(lst,1): #start省略不写,直接写起始值也可以
print(index,item)
列表的特有操作
列表是Python中的可变数据类型,在Python中的可变数据类型具有增、删、改、查这样的方法。当进行增、删、改时,列表的内存地址是不变的。
列表的相关操作方法:
列表的方法 | 描述说明 |
---|---|
lst.append(x) | 在列表lst最后增加一个元素 |
lst.insert(index,x) | 在列表中第index位置增加一个元素 |
lst.clear() | 清除列表lst中所有元素 |
lst.pop(index) | 将列表lst中第index位置的元素取出,并从列表中将其删除 |
lst.remove(x) | 将列表lst中出现的第一个元素x删除 |
lst.reverse(x) | 将列表lst中的元素反转 |
lst.copy() | 拷贝列表lst中的所有元素,生成一个新的列表 |
# 列表的相关操作
lst = ['hello', 'world'<