Python学习笔记(十一)----组合数据类型之序列与列表
目录
1.序列和索引
序列 是一个用于储存多个值的连续空间,每个值都对应一个整数的编号,成为 索引
索引 |
---|
正向递增索引 | 方向递减索引 |
---|
序列 |
---|
字符串 | 有序序列 |
---|---|
列表 | 有序序列 |
元组 | 有序序列 |
集合 | 无序序列 |
字典 | 无序序列 |
上述列表中的字符串为基本数据类型,而序列、元组、集合和字典属于组合数据类型
代码示例:
#正向递增索引
s='ybj❤yyy'
for i in range(0,len(s)):
print(i,s[i],end='\t')
print('\n-------------')
#逆向递减索引
for i in range(-7,0)
print(i,s[i],end='\t')
运行结果:
0 y 1 b 2 j 3 ❤ 4 y 5 y 6 y
-7 y -6 b -5 j -4 ❤ -3 y -2 y -1 y
2.序列
2.1序列的切片操作
2.1.1语法结构
序列[start:end:step]
'''
注释:
start:切片的开始索引(包含)(默认从0开始)
end:切片的结束索引(不包含)(默认到最后一个元素且包含)
step:步长(默认为1)
'''
代码示例:
s='hellow'
s1=s[0:5:2]
2.2序列的相加和相乘操作
代码示例:
s='Hello'
s2='World'
print(s+s2)#产生一个新的字符串序列'HelloWorld'
#序列的相乘
print(s*5)
print('-'*40)
2.3常用的操作符
操作符/函数 | 描述说明 |
---|---|
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的总次数 |
代码示例:
s='Helloworld'
#in的使用
print('e在helloword中存在吗?',('e'in s))
print('e在helloword中存在吗?',('v'in s))
#not in 的使用
print('e在helloword中存在吗?',('e'not in s))
print('e在helloword中存在吗?',('v'not in s))
#内置函数
print('len()',len(s))
print('max()',max(s))
print('min()',min(s))
#序列对象的方法,使用序列的名称,打点调用
print('s.index()',s.index('o'))
#print('s.index()',s.index('v')) #会报错因为v不存在
print('s.count()',s.count('o'))
3.列表
列表是指一系列按特定的顺序排列的元素组成,是Python中内置的 可变序列 ,在Python中使用[]
定义列表,元素与元素之间使用 英文的逗号 隔开,另外,列表中的元素可以是 任意 的 数据类型
3.1列表的创建与删除方式
3.1.1列表的创建
- 使用
[]
直接创建
列表名=[element1,element2,...elementN]
- 使用内置函数
list()
创建列表
列表名=list(序列)
3.1.2列表的删除
del 列表名
代码示例:
#直接使用[]创建
lst=['yangbanjin','❤','yyy',99]
print(lst)
#使用函数list()
lst2=list('yangbanjin❤yyy')
lst3=list(range(1,10,2))#从1开始到10结束,不包含10,步长为2
print(lst2)
print(lst3)
#列表是序列的一种,对序列的操作符、运算符、函数均可使用
print(lst+lst2+lst3)
print(lst*3)
print(len(lst))
print(max(lst3))
print(min(lst3))
print(lst2.count('y'))
print(lst2.index('y'))
#删除操作
lst4=[10,20,30]
print(lst4)
del lst4
#print(lst4)#报错,没有定义
运行结果:
[‘yangbanjin’, ‘❤’, ‘yyy’, 99]
[‘y’, ‘a’, ‘n’, ‘g’, ‘b’, ‘a’, ‘n’, ‘j’, ‘i’, ‘n’, ‘❤’, ‘y’, ‘y’, ‘y’]
[1, 3, 5, 7, 9]
[‘yangbanjin’, ‘❤’, ‘yyy’, 99, ‘y’, ‘a’, ‘n’, ‘g’, ‘b’, ‘a’, ‘n’, ‘j’, ‘i’, ‘n’, ‘❤’, ‘y’, ‘y’, ‘y’, 1, 3, 5, 7, 9]
[‘yangbanjin’, ‘❤’, ‘yyy’, 99, ‘yangbanjin’, ‘❤’, ‘yyy’, 99, ‘yangbanjin’, ‘❤’, ‘yyy’, 99]
4
9
1
4
0
[10, 20, 30]
3.2enumerate
(枚举)函数的使用
语法结构:
for index,item in enumerate(lst):
输出index和item
#index:序号
#item:元素
代码示例:
#列表的遍历操作
lst=['yangbanjin','❤','yyy',99]
#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):#start可以省略不写
print(index,item)
运行结果:
yangbanjin
❤
yyy
99
0 --> yangbanjin
1 --> ❤
2 --> yyy
3 --> 99
0 yangbanjin
1 ❤
2 yyy
3 99
1 yangbanjin
2 ❤
3 yyy
4 99
3.3列表的相关操作方法
列表方法 | 描述说明 |
---|---|
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=['yangbanjin','love','yyy']
print('原列表',lst,id(lst))
#增加元素
lst.append('999')
print('增加之后',lst,id(lst))#增加之后元素个数可变,内存地址不可变
#插入元素
lst.insert(1,521)
print(lst)
#列表元素的删除
lst.remove(521)
print('删除之后',lst,id(lst))
#使用pop(index)根据索引将元素取出,然后再删除
print(lst.pop(1))
#清楚列表中所有元素
# lst.clear()
# print(lst,id(lst))
#列表的逆向输出
lst.reverse()
print(lst)
#列表的拷贝
new_lst=lst.copy()
print(lst,id(lst))
print(new_lst,id(new_lst))
#列表元素的修改操作
lst[1]='yyc'
print(lst)
运行结果:
原列表 [‘yangbanjin’, ‘love’, ‘yyy’] 2358647647168
增加之后 [‘yangbanjin’, ‘love’, ‘yyy’, ‘999’] 2358647647168
[‘yangbanjin’, 521, ‘love’, ‘yyy’, ‘999’]
删除之后 [‘yangbanjin’, ‘love’, ‘yyy’, ‘999’] 2358647647168
love
[‘999’, ‘yyy’, ‘yangbanjin’]
[‘999’, ‘yyy’, ‘yangbanjin’] 2358647647168
[‘999’, ‘yyy’, ‘yangbanjin’] 2358636497856
[‘999’, ‘yyc’, ‘yangbanjin’]
3.4列表排序的两种方法
方法一:列表对象的sort
方法
lst.sort(key=None,reverse=False)
'''
key:表示排序的规则
reverse:表示排序方式(默认升序)
'''
代码示例:
#列表的排序
lst=[4,6,98,56,47,23]
print('原列表',lst)
lst.sort()
print('升序',lst)
lst.sort(reverse=True)
print('降序',lst)
lst2=['yangbanjin','xihuan','yyy','YYC','YYY']
print('原列表',lst2)
#升序排列,先排大写,再排小写(按照ASCII码)
lst2.sort()
print('升序',lst2)
lst2.sort(reverse=True)
print('降序',lst2)
#自己制定规则,忽略大小写
lst2.sort(key=str.lower)
print(lst2)
运行结果:
原列表 [4, 6, 98, 56, 47, 23]
升序 [4, 6, 23, 47, 56, 98]
降序 [98, 56, 47, 23, 6, 4]
原列表 [‘yangbanjin’, ‘xihuan’, ‘yyy’, ‘YYC’, ‘YYY’]
升序 [‘YYC’, ‘YYY’, ‘xihuan’, ‘yangbanjin’, ‘yyy’]
降序 [‘yyy’, ‘yangbanjin’, ‘xihuan’, ‘YYY’, ‘YYC’]
[‘xihuan’, ‘yangbanjin’, ‘YYC’, ‘yyy’, ‘YYY’]
方法二:内置函数sorted()
sorted(iterable,key=None,reverse=False)
#iterable:表示的是排序的对象
#列表的排序
lst=[4,6,98,56,47,23]
print('原列表',lst)
#排序
asc_lst=sorted(lst)
print('升序',asc_lst)
print('原列表',lst)#原列表不变
#降序
desc_lst=sorted(lst,reverse=True)
print('降序',desc_lst)
print('原列表',lst)#原列表不变
lst2=['yangbanjin','xihuan','yyy','YYC','YYY']
print('原列表',lst2)
#忽略大小写
new_lst2=sorted(lst2,key=str.lower)
print('原列表',lst2)
print('排序后的顺序',new_lst2)
运行结果:
原列表 [4, 6, 98, 56, 47, 23]
升序 [4, 6, 23, 47, 56, 98]
原列表 [4, 6, 98, 56, 47, 23]
降序 [98, 56, 47, 23, 6, 4]
原列表 [4, 6, 98, 56, 47, 23]
原列表 [‘yangbanjin’, ‘xihuan’, ‘yyy’, ‘YYC’, ‘YYY’]
原列表 [‘yangbanjin’, ‘xihuan’, ‘yyy’, ‘YYC’, ‘YYY’]
排序后的顺序 [‘xihuan’, ‘yangbanjin’, ‘YYC’, ‘yyy’, ‘YYY’]
3.5列表生成式
3.5.1语法结构
lst=[expression for item in range]
lst=[expression for item in range if condition]
代码示例:
import random #产生随机数
lst=[item for item in range(1,11)]
print(lst)
lst=[item*item for item in range(1,11)]
print(lst)
lst=[random.randint(1,100) for _ in range(10)]
print(lst)
#从列表中选择符合条件的元素组成新列表
lst=[i for i in range(10) if i%2==0]
print(lst)
运行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[59, 97, 75, 40, 77, 79, 31, 100, 25, 47]
[0, 2, 4, 6, 8]
3.6二维列表的遍历与生成
二维列表也被称为表格数据,由行和列组成
3.6.1用双重for
循环遍历二维列表
for row in 二维列表:
for item in row:
pass
#创建二维列表
lst=[
['城市','环比','同比'],
['北京',102,103],
['上海',104,504],
['深圳',100,39]
]
print(lst)
#使用双重for循环遍历
for row in lst:
for item in row:
print(item,end='\t')
print()
#列表生成式,生成四行五列的二维列表
lst2=[ [j for j in range(5)]for i in range(4)]
print(lst2)
运行结果:
[[‘城市’, ‘环比’, ‘同比’], [‘北京’, 102, 103], [‘上海’, 104, 504], [‘深圳’, 100, 39]]
城市 环比 同比
北京 102 103
上海 104 504
深圳 100 39
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]