一、 序列类型入门
python的数据类型:int float bool str
运算符+ - * / % > < and or not
流程控制ifelsewhilefor
掌握python的2大容器类型数值类型(3个):int float bool序列类型容器(3个):str : 可以存储 数字、字母、特殊符号、等一切文本数据的容器list (列表)tuple (元组)散列类型容器(2个) set(集合)、dict(字典)函数基础
6.1 序列简介
数据结构:编程语言中会将,以某种方式组合起来的数据元素集合称为数据结构
-
序列类型:存放多个值在连续的内存空间中,并且这些值按照一定顺序排列,每个值都有所在位置的编号 (下标) 访问它们
-
序列类型:可以存放多个数据的一种数据类型,他有序
6.2 列表和元组
6.2.1 列表 list
列表 list:有序的集合,可以装任何数据类型的容器
-
创建列表
-
- 直接写 [ ] 括起来,里面的元素使用 逗号 隔开
# 创建一个变量,数据是列表,长度为7 name_arr = ['小明', '小李', '年龄', '水果',10,6.666,True] print(name_arr) print(type(name_arr)) #查看数据类型是list型# 注意,请勿在字符串中写上, 这个长度为1 name_arr = ['香蕉,橘子,榴莲'] print(name_arr) print(type(name_arr))
-
- range() 函数 : 根据给定的参数,生成有规律的整数序列
range(start,stop,step=1)- start 开始- stop 停止- step 步长,可以不填,默认1 包头不包尾/前闭后开[ ) 🌰: range(1,101) #输出1-100,取不到101
print(list(range(1, 1001))) # 生成1~1000的列表range(start,stop,step)- start 开始- stop 停止- step 步长# 需要1~100中间的偶数 print(list(range(2, 101,2)))# 需要10~1倒序来 arr = list(range(10, 0, -1)) # 步长也可以为负数 print(arr)
-
6.2.2 元组 tuple
元组和列表基本一样,也是用来存储多个数据的,可以装任何数据类型的容器。
-
最大的区别:列表是可以修改的,
- 元组一但创建以后,则无法再变更
- 元组:不能改的列表
-
创建方式
-
直接使用 ( ) 英文括号 圈起来,数据之间用英文逗号隔开
# 正常情况 元组是() 列表是[ ] number = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, True, False, '哈哈哈') print(number, type(number)) # 也可以直接 数据1,数据2, number = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, True, False, '彬彬' print(number, type(number))# 一个元素的特殊情况 当元组只有一个元素的时候,需要 (1,) 表示 number = (1,) # (1) 括号被优先理解为 优先级 print(number, type(number))
2 . 也能通过 range + 类型转换创建
t = tuple(range(1,101))print(t) print(type(t))
-
6.3 序列类型基本操作
序列:list、tuple、str 全部通用
6.3.1 下标
下标是序列中每个元素的编号
“Python是世界上最好的语言”
序列类型中比如字符串,每个字符串都会存在一个下标(索引),从左往右开始的。
- 注意,下标默认是从0开始
下标的作用:可以帮助访问序列中的某个元素
语法格式
***序列[下标]***
-
s = "Python是世界上最好的语言"print(s[0]) # P 下标从0开始 print(s[5]) # n# 创建一个变量,数据是列表,长度为4 name_arr = ['彬彬', '翠果', '冰糖', '清越'] print(name_arr,type(name_arr)) name = name_arr[0] print(name,type(name))# 访问的时候,不能超出下标最大范围 0~3 # print(name_arr[4]) print(name_arr[3])
-
可以反着取下标:右往左 -1 -2 -3
url = "https://www.baidu.com/s?wd=hello&rsv_spt=1"
print(url[41]) # 正向下标
print(url[-1]) # -1 表示倒数第一个
6.3.2 切片
单独提取一个,可以直接使用 序列[下标]
L = ['彬彬', '翠果', '清越', '晶晶', '不凡']L2 = [L[1], L[2], L[3]] # 笨方法
print(L2)# 切片也能干这种事情
"""单独访问: 序列[下标]切片访问: 序列[下标1:下标2] 可以切分序列,切出来类型不变下标1:表示开始的下标下标2:表示结尾的下标包头不包尾/前闭后开
"""# 切片:截取多个元素
# 语法:序列[开始下标:结束下标+1]
# 注意:结束下标同range一样,不包尾部
L = ['彬彬', '翠果', '清越', '冰糖', '不凡']# 也是不包括 尾部 语法和range非常像
print(L[1:3]) # 从下标1处取到下标2处
print(L[1:4]) # 从下标1处取到下标3处
print(L[1:5]) # 从下标1处取到下标4处
print(L[1:2]) # 从下标1处取到下标1处s = "hello world"
print(s[0:5]) # 开始下标0 结束下标4 由于取不到尾 所以4+1
# 简写:如果是从头开始切的
print(s[:5]) # 头部可以省略# 提取:world
print(s[6:]) # 如果是切到尾部,也可以省略不写# 小练习:以下是什么效果?
print(s[:]) # 从头切到尾# 切片和range语法很像
# 扩展语法:序列[开始下标:结束下标+1:步长单位=1] (了解)
s = "hello world"
# print(s[::2]) # 从头到尾 2步隔着切
# print(s[::5])# ★步长常用的时候:利用-1步长来反转序列
print(s[::-1]) # 当步长为负数的时候,头部就是右边,尾部就是左边
6.3.3 成员运算符
返回的也是布尔值
元素 in 容器
运算符 | 描述 | 实例 |
---|---|---|
in | 如果在指定的容器中找到值返回 True,否则返回 False。 | x 在 y 容器中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的容器中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
in : 属于 , 可以判断某个元素是否属于 序列
not in : 不属于
# 列表判断元素是否存在
arr = ["张三",'李四','王五']
while True:name = input("请输入用户名:")print(name in arr) # 原来判断是否存在一个元素s = "hello python3.8.10"
# 字符串单个判断存在不存在
print("p" in s) # True
print(" " in s) # True# 整体判断,要当作一个整体去找
print("hello" in s) # True 能找到hello这个整体
print("hellopython" in s) # False
print("hello python" in s) # True
print("3.8.10" in s) # True
print("3.10.8" in s) # False# 空字符串: ""
print("" in s) # 空字符串属于一切字符串子集
6.3.4 序列也能运算
序列类型相加 都是合并
- 字符串相加:‘a’ + ‘b’ = ‘ab’
- 列表相加 : [1,2,3] + [4,5,6] = [1,2,3,4,5,6]
字符串 是可以通过 相加 和 乘法 运算arr = [1,2,3]
arr2 = [3,4,5]
arr + arr2 = [1,2,3,3,4,5]# 乘法只能乘整数,本质也是反复和自己拼接
arr2 * 3 => [3,4,5,3,4,5,3,4,5]
6.4 序列常用内置函数
实现和序列相关的操作
函数:print( ) type( ) input( ) id( )
- python中的函数,不要等价数学函数
- 函数等于是一个功能,可以直接使用的封装好的工具
- 学习一个函数就学2个东西
- 作用是什么
- 参数怎么填
- 他返回什么东西没?
内置函数
- python官方提供的功能
函数 | 功能 |
---|---|
len() | 计算序列的长度,即返回序列中包含多少个元素。 |
max() | 找出序列中的最大元素。注意,对序列使用 sum() 函数时,做加和操作的必须都是数字,不能是字符或字符串,否则该函数将抛出异常,因为解释器无法判定是要做连接操作(+ 运算符可以连接两个序列),还是做加和操作。 |
min() | 找出序列中的最小元素。 |
sum() | 计算元素和。 |
sorted() | 对元素进行排序 |
6.4.1 len( )
len( ) : 计算序列的长度,即返回序列中包含多少个元素。
序列的长度就是指序列的元素数量# len()
# 作用:求出序列的长度
# 参数(括号里面的东西):序列
# 返回:长度 int
print(len(name_list))
print(len(list1))
s = "hello world"
print(len(s))s = "hello"
print(len(s)) # 字符串的长度lis = [1, 2, 3, '哈哈']s = "hello"
# 最大下标 = 长度 - 1 # 为什么要减1,因为下标是从0开始的
index = len(s) - 1
print(s[index])
6.4.2 ASCII编码(了解)
ASCII 本质就是一个一个数,计算机采用了这个编码方式
计算机真正存储:01010101111111111
计算机没有办法去真正有意义的存 ‘a’ 进去
通过规则
‘a’ -> 97 -> 0110 0001
字符->ASCII编码->二进制
# python支持使用 ord()函数 将一个字符作为参数,返回对应的ascii值
# chr()函数 将一个整数作为参数,返回对应的字符s = 'a'
print(ord(s)) # a:97 A:65
print(chr(97))
6.4.3 max( )与min( )
max( ) : 返回给定参数的最大值,参数可以是序列
作用:求最大值和最小值
参数:序列
返回:最值lis = [9, -5, 5, 2, 7, 100, 1, 30]# 最大值 max
print(max(lis))
# 最小值 min
print(min(lis))# 字符串也是可以比较大小的。
# ascii编码,本质上也是在比数字
s = ['~','b','c','z','@']
print(max(s))
6.4.4 sum( )
sum(序列) : 对序列进行求和计算
作用:对序列进行求和计算
参数:序列
返回:和 ints = [1,2,3,4,5,6]
print(sum(s))# 求1+2+3+...+100 的和,不用fora = list(range(1,101)) # 创建一个 1~100的a列表
print(sum(a)) # 对a列表进行求和
6.4.5 sorted( )
sorted: 可以对序列类型进行排序操作,支持升序(默认)和降序,并返回一个新的序列
lis1 = [10, 5, 11, 6, 8, 0]作用:对序列进行排序
参数:序列
返回:返回的一定是列表"""print 输出 额外功能参数sep 分隔符功能end 结尾换行sorted 排序默认是升序的reverse = True # 降序reverse = False # 升序 默认的
"""
list1 = [1, 9, 2, 8, 3, 7, 4, 6, 5]print(sorted(list1, reverse=True))
# 注意括号区分 不要写到print里面去了,reverse是sorted函数功能参数
# 错误案例
# print(sorted(list1),reverse=True)list1 = [1, 9, 2, 8, 3, 7, 4, 6, 5]
# 方法二,也可以先排好有序,然后直接 [::-1] 反转
print(sorted(list1)[::-1])
案例:水仙花数
求所有三位数的水仙花数
"""如何提取三位数的 各个部位"""
# 方法一:转字符串来提取下标
# for i in range(100, 1000):
# # # i 就是表示三位数
# str_i = str(i) # 整数 转 字符串(序列)
# x = int(str_i[0])
# y = int(str_i[1])
# z = int(str_i[2])
# if x ** 3 + y ** 3 + z ** 3 == i:
# print(i, "水仙花数")# # 方法二:数字计算取出来
# for i in range(100, 1000):
# x = i // 100
# y = i % 100 // 10
# z = i % 10
# if x ** 3 + y ** 3 + z ** 3 == i:
# print(i, "水仙花数")# 方法三:循环嵌套
# for x in range(1, 10):
# for y in range(0, 10):
# for z in range(0, 10):
# i = x * 100 + y * 10 + z # 还原成3位数
# if x ** 3 + y ** 3 + z ** 3 == i:
# print(i)