1 序列
- 序列是一块可寄存多个值的间断内存空间,这些值按肯定顺序排列,可通过每个值所在位置的编号(称为索引)拜访它们。
- Python序列构造次要有列表、元组、汇合、字典和字符串;
1.1 索引
- 序列中,每个元素都有属于本人的编号(索引)。从起始元素开始,索引值从 0 开始递增。也能够为正数即从右到左计数;
- 也能够为正数即从右到左计数;
name = ["zhangsan", "lisi", "wangwu"]print(name[0])print(name[2])print(name[-1])
后果:
zhangsanwangwuwangwu
1.2 切片
- 语法:name[start : end : step]
name:示意序列名称;
start:切片开始地位,默认为0
end:切片截止地位,默认为序列的长度
step:切片步长,默认为1
name = ["火影", "鸣人", "佐助", "小樱"]num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(name[0:2])print(name[0:2:1])print(num[0:9:2])print(name[:])print(name)
后果:
['火影', '鸣人']['火影', '鸣人'][1, 3, 5, 7, 9]['火影', '鸣人', '佐助', '小樱']['火影', '鸣人', '佐助', '小樱']
1.3 序列相加
- 两个序列类型必须雷同
- 相加行将两个序列进行连贯
- 应用 “ + ” 即可
num_str = ["1", "2", "3", "4", "5"]num = [1, 2, 3, 4, 5]name_str = ["路飞", "索洛", "乔巴", "山治", "娜美"]num_new = num + num_strprint(num_new)name_str_new = name_str + num_strprint(name_str_new)
后果:
[1, 2, 3, 4, 5, '1', '2', '3', '4', '5']['路飞', '索洛', '乔巴', '山治', '娜美', '1', '2', '3', '4', '5']
- 不同类型的序列不能相加,比方列表和元组
num_str = ["1", "2", "3", "4", "5"]num = (1, 2, 3, 4, 5)num_new = num + num_strprint(num_new)
后果:
Traceback (most recent call last): File "F:/python_study/main.py", line 6, in <module> num_new = num + num_strTypeError: can only concatenate tuple (not "list") to tuple
1.4 乘法
- 应用数字n乘以一个序列会生成一个新的序列,示意原序列反复n次
mi = ["我是米粉", "我是忠诚的米粉"]mi_new = mi * 3print(mi_new)
后果:
['我是米粉', '我是忠诚的米粉', '我是米粉', '我是忠诚的米粉', '我是米粉', '我是忠诚的米粉']
- 还能够初始化序列的长度
mi = [None] * 3print(mi)
后果:
[None, None, None]
1.5 查看某个元素是不是序列的成员(元素)
- 应用关键字in查看元素是不是序列的成员
phone = ["mate9", "mate10", "mate20", "mate30", "mate40"]print("mate40" in phone)print("mate40pro" in phone)
后果:
TrueFalse
- 应用not in查看是否不蕴含的关系
phone = ["mate9", "mate10", "mate20", "mate30", "mate40"]print("p40pro" not in phone)print("p40pro" in phone)
后果:
TrueFalse
1.6 计算序列的长度、最大值和最小值
- max()返回序列中的最大元素,min()返回最小值,len()返回序列的长度
num = [10, 20, 30, 40, 50, 60]print(max(num))print(min(num))print(len(num))
后果:
60106
- 和序列相干的内置函数
函数 | 性能 |
---|---|
len() | 计算序列的长度,即返回序列中蕴含多少个元素。 |
max() | 找出序列中的最大元素。留神,对序列应用 sum() 函数时,做加和操作的必须都是数字,不能是字符或字符串,否则该函数将抛出异样,因为解释器无奈断定是要做连贯操作(+ 运算符能够连贯两个序列),还是做加和操作。 |
min() | 找出序列中的最小元素。 |
list() | 将序列转换为列表。 |
str() | 将序列转换为字符串。 |
sum() | 计算元素和。 |
sorted() | 对元素进行排序。 |
reversed() | 反向序列中的元素。 |
enumerate() | 将序列组合为一个索引序列,多用在 for 循环中。 |
num = [20, 60, 40, 30, 50, 10]num_new = sorted(num)print(sum(num))print(num)print(sorted(num))
后果:
210[20, 60, 40, 30, 50, 10][10, 20, 30, 40, 50, 60]
内容很多,我得保持。。。。
2 列表
- python中的内置可变序列
- 应用“ [ ] ”把元素括起来,相邻元素应用“ , ”隔开
2.1 列表的创立和删除
- 应用赋值运算符间接创立列表
语法:name_list = [元素1, 元素2, 元素3......]
name_list = ["ABC", "DEF", "GHI", "JKL"]print(name_list)
后果:
['ABC', 'DEF', 'GHI', 'JKL']
- 创立空列表
语法:em_name_list = [ ]
- 创立数值列表
语法:list(data)
new_list = list(range(1, 10))print(new_list)
后果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
- 删除列表
语法:del name_list
new_list = list(range(1, 10))print(new_list)del new_listprint(new_list)
后果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]Traceback (most recent call last): File "F:/python_study/main.py", line 7, in <module> print(new_list)NameError: name 'new_list' is not defined
2.2 拜访列表元素
- 联合print()函数和角标进行配合应用
new_list = ["小学生", "初中生", "高中生", "大学生"]print(new_list)print(new_list[3])print(new_list[0])
后果:
['小学生', '初中生', '高中生', '大学生']大学生小学生
2.3 遍历列表
- 应用for循环实现
new_list = ["小学生", "初中生", "高中生", "大学生"]for student in new_list: print(student)
后果:
小学生初中生高中生大学生
- 应用for循环和enumerate()函数实现,可同时输入元素内容和索引的值
new_list = ["小学生", "初中生", "高中生", "大学生"]for index, item in enumerate(new_list): print(index, item)
后果:
0 小学生1 初中生2 高中生3 大学生
2.4 增加、批改和删除列表元素
增加元素
① name_list.append(元素) :在列表开端追加my_list = ["小学生", "初中生", "高中生", "大学生"]my_list.append("研究生")print(my_list)
后果:
['小学生', '初中生', '高中生', '大学生', '研究生']
②name_list.extend(new_name_list):将new_name_list中的元素全副增加到name_list中
name_list = ["小学生", "初中生", "高中生", "大学生"]new_name_list = ["小学", "中学", "高中", "大学"]print(name_list)name_list.extend(new_name_list)print(name_list)
后果:
['小学生', '初中生', '高中生', '大学生']['小学生', '初中生', '高中生', '大学生', '小学', '中学', '高中', '大学']
- 批改元素: 配合角标应用
num = [1, 2, 3, 4, 5]print(num) num[0] = 11num[4] = 55print(num)
后果:
[1, 2, 3, 4, 5][11, 2, 3, 4, 55]
- 删除元素
①依据索引删除,应用del:
num = [1, 2, 3, 4, 5]print(num)del num[0]print(num)
后果:
[1, 2, 3, 4, 5][2, 3, 4, 5]
②依据元素值删除,应用remove:
num = [1, 2, 3, 4, 5]print(num)num.remove(1)print(num)
后果:
[1, 2, 3, 4, 5][2, 3, 4, 5]
2.5 对列表进行统计计算
- 获取指定元素呈现的次数
- 获取指定元素首次呈现的下标
- 统计数值列表的元素和
# -*- coding:utf-8 -*-# 应用count()办法获取指定元素呈现的次数num = [1, 2, 3, 1, 2, 3, 1, 2, 3]print(num.count(1))# 应用index()办法获取指定元素首次呈现的下标print(num.index(3))# 应用sum()计算数值列表元素的和print(sum(num))
后果:
3218
2.6 对列表进行排序
- sort()办法
①语法:name_list.sort(key=None, reverse=False)
②阐明:key提取一个用于比拟的键,reverse为True示意降序,为False示意升序
num = [1, 2, 3, 1, 2, 3, 1, 2, 3]print("原序列:", num)num.sort(reverse=False)print("升序排列:", num)num.sort(reverse=True)print("降序排列:", num)
后果:
原序列: [1, 2, 3, 1, 2, 3, 1, 2, 3]升序排列: [1, 1, 1, 2, 2, 2, 3, 3, 3]降序排列: [3, 3, 3, 2, 2, 2, 1, 1, 1]
- 应用sorted()办法
①语法:sorted(list_name, key=None, reverse=False)
②阐明:listname是列表名称,key为指定的规定,reverse为True示意降序,为False示意升序
# -*- coding:utf-8 -*-num = [1, 2, 3, 1, 2, 3, 1, 2, 3]print("原序列:", num)new_num = sorted(num, reverse=False)print("升序排列:", new_num)new_num_l = sorted(num, reverse=True)print("降序排列:", new_num_l)
后果:
原序列: [1, 2, 3, 1, 2, 3, 1, 2, 3]升序排列: [1, 1, 1, 2, 2, 2, 3, 3, 3]降序排列: [3, 3, 3, 2, 2, 2, 1, 1, 1]
2.7 列表推导式
- 生成指定范畴的数值列表
- 生成指定需要的列表
- 列表中抉择符合条件的元素组成新的列表
# -*- coding:utf-8 -*-import random# 生成指定范畴的数值列表num = [random.randint(10, 50) for i in range(20)]print("1、随机取10到50中20个数字放到num列表中:", num)# 生成指定需要的列表mm = 1num_list = [mm+i for i in range(10)]print("2、给变量mm每次加i,循环10次:", num_list)# 列表中抉择符合条件的元素组成新的列表zz = [20, 30, 40, 50, 60, 70, 80, 90, 100]new_zz = [j for j in zz if j > 60]print("3、原序列:", zz)print("4、取大于60后新的序列:", new_zz)
后果:
1、随机取10到50中20个数字放到num列表中: [21, 43, 48, 40, 14, 34, 35, 28, 45, 11, 33, 33, 19, 26, 18, 23, 17, 37, 39, 27]2、给变量mm每次加i,循环10次: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]3、原序列: [20, 30, 40, 50, 60, 70, 80, 90, 100]4、取大于60后新的序列: [70, 80, 90, 100]
3 元组
- 元组是不可变序列
- 应用“( )”括起来,元素间用逗号隔开
3.1 元组的创立和删除
- 间接应用赋值运算符创立元组
- 创立空元组
- 创立数值元组
- 删除元组
# -*- coding:utf-8 -*-# 创立空元组name = ()print("这是空元组:", name)# 间接应用赋值运算符创立元组name_new = ("laoli", "xiaozhang", "laowang")print("创立元组:", name_new)# 创立数值元组num = tuple(range(1, 10, 2))print("创立数值元组:", num)# 删除元组del numprint("删除num元组:", num)
后果:
这是空元组: ()创立元组: ('laoli', 'xiaozhang', 'laowang')创立数值元组: (1, 3, 5, 7, 9)Traceback (most recent call last): File "F:/python_study/main.py", line 17, in <module> print("删除num元组:", num)NameError: name 'num' is not defined
3.2 拜访元组元素
- 联合print()和下标
# -*- coding:utf-8 -*-num = (1, 2, 3, 4, 5, 6, 7, 8)print(num[0], num[7])print(num[-1:])
后果:
1 8(8,)
3.3 批改元组元素
- 元组是不可变序列,不能批改单个元素,从新赋值生成新的元组
# -*- coding:utf-8 -*-num = (1, 2, 3, 4, 5, 6, 7, 8)num1 = (9, 10)num2 = num + num1print(num2)
后果:
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
3.4 元组推导式
- 同列表相似,应用推导式能够疾速生成一个元组(不再赘述)
3.5 面试必备:元组与列表的区别
- 相同点:
①都属于序列;
②都能够依照特定程序寄存一组元素;
③类型不受限制。
- 区别:
①列表属于可变序列,元素能够批改和删除;元组属于不可变序列,元素不能够批改,但能够替换;
②列表能够应用append()、extend()、insert()、remove()、pop()等办法,然而元组不能;
③列表能够应用切片,元组不行;
④元组比列表的拜访和处理速度要快;
⑤列表不能作为字典的键值,但元组能够。