首先不好意思,停更了五天(虽然感觉也没什么人看),只是想分享一下自己真实学习中做的笔记。在学习之前本来自己计划一个星期学完基础python,但前几天由于有事,延误了几天。我是学习上总喜欢规定好时间,然后天时地利人和占全,才想着开始学习,期间如果遇到一些事情,便会耽误学习,想着明天吧,明天找个好时机再学。这是一个陋习,也希望大家引以为戒,学习没有借口,在碎片化时代下的我们,更应该学会在细碎的时间内好好学习!之后仍会保持原先计划,七天学完python,我也会保持更新,希望大家一起努力!
数据序列
字符串(string)
字符串是python中最常用的数据类型。一般使用引号创建字符串。
字符串特征
-
一对引号字符串(可以是单引号,也可以是双引号)
name1 = 'Tom' name2 = "Tom"
-
三引号字符串(作用在于可以跨行,支持换行回车)
name3 = '''Tom''' name4 = """Tom""" a = ''' I am Tom, nice to meet you!''' a = """I am Tom, nice to meet you!"""
-
# 三种方式:单引号、双引号、三引号 a = 'TOM' b = "TOM" C = """I am Tom""" d = '''I am Tom''' f = '''I am Tom''' # 三引号支持换行回车 # I'm Tom g = "I'm Tom" # 方式一:若字符串内容中有单引号,则使用双引号 e = 'I\'m Tom' # 方式二:使用转义字符 # python中引入多种方式(多种引号)来创建字符串,目的便是解决字符串内容中出现引号,导致无法正常配对的情况
下标
下标
又叫索引
,下标的作用即是通过下标快速找到对应的数据,字符串中的字符是通过索引来提取的
索引从0开始,为正向索引顺序
python可以取负值,表示从末尾提取,最后一个为-1,为反向索引顺序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j05ZtX2t-1657120893189)(C:\Users\86132\AppData\Roaming\Typora\typora-user-images\image-20220705120040116.png)]
str = 'abcdef'
print(str)
# 通过索引可精确找到某个字符数据
# str[]
print(str[0])
# 结果为a
切片
切片是对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作
-
语法
序列[开始位置下标:结束位置下标:步长]
注意:
不包含结束位置下标对应的数据,即左闭右开,正负整数均可
步长是选取间隔,正负整数均可,负数表示倒叙选取,默认步长为1
通常上边界不包括在提取字符串内,若没指定值,切片的边界默认为0和序列的长度
选取方向,即索引开始到结束的方向,要求与步长的方向保持一致,负责无法选取,会显示空字符串
-
例子
str = 'string' print(str[0:3]) # 结果为st print(str[1:5]) # 结果为trin print(str[:-1]) # 结果为strin print(str[:]) # 结果为string print(str[-3:-1]) # 结果为in print(str[::-1]) # 结果为gnirts print(str[::-2]) # 结果为git print(str[1:5:2]) # 结果为ti print(str[1:5:-1]) # 结果为空字符串 如果选取方向,即索引开始到结束的方向和步长的方向冲突,则无法选取数据 print(str[5:1:-1]) # 结果为gnir
常用操作方法
字符串常用操作方法有查找、修改和判断三大类
-
字符串查找(find,index)
方法名称 功能 find(str,[beg[,end]]) 检测某个子串是否包含在这个字符串中,如果在则返回这个子串第一次出现的索引位置,否则则返回-1。 index(str,[beg[,end]]) 检测某个子串是否包含在这个字符串中,如果在则返回这个子串第一次出现的索引位置,否则则报异常 rfind(str,[beg[,end]]) rfind()和find()功能相同,但查找方向为右侧开始 rindex(str,[beg[,end]]) rindex()和index()功能相同,但查找方向为右侧开始 其中,[]表示可选参数,且同切片一致为左闭右开
# 查找 # find() index() str = 'hello python' # find() print(str.find('el')) # 1 print(str.find('el',1,2)) # -1 # index() print(str.index('el',1,8)) # 1
-
字符串修改之合并与替换(join、replace)
方法名称 功能 join(seq) 以指定字符串作为分隔符,将seq中所有的元素(的字符串数据)合并为一个新的字符串 replace(old,new[,max]) 把 字符串中的old 替换成 new,如果指定max,则替换不超过max次 # 修改之合并与替换 # join():合并 合并列表中的字符串数据组成一个大字符串 list = ['aa','bb','cc'] # aa..bb..cc str2 = '..'.join(list) print(str2) # 结果为aa..bb..cc # repla():替换 str1 = 'hello python' print(str.replace('python','world')) print(str) # 结果为hello world # 调用replace方法后,原字符串中的数据并未发生修改,修改后的数据只是replace函数的返回值 # ---说明字符串为不可变数据类型 # 数据根据是否可以改变划分为 可变类型 和 不可变类型
-
字符串修改之大小写轮转操作(upper、lower、swapcase、capitalize、title)
方法名称 功能 upper 将字符串中所有元素都转为大写 lower 将字符串中所有元素都转为小写 swapcase 交换大小写,即大写转为小写,小写转为大写 capitalize 第一个大写,其余小写 title 每个单词的第一个字符大写,其余小写 # 字符串修改之大小写轮换操作 str3 = 'my name is Tom' print(str3.upper()) # MY NAME IS TOM print(str3.lower()) # my name is tom print(str3.swapcase()) # MY NAME IS tOM print(str3.capitalize()) # My name is tom print(str3.title()) # My Name Is Tom ''' 结果为: MY NAME IS TOM my name is tom MY NAME IS tOM My name is tom My Name Is Tom '''
-
字符串修改之字符串对齐(center、just、zfill)
方法名称 功能 center(width,fillchar) 返回一个指定宽带width居中的字符串,fillchar为填充字符,默认为空格 ljust(width[,fillchar]) 返回一个原字符串左对齐,并使用fillchar填充至长度width的新字符串,fillchar默认为空格 rjust(width[,fillchar]) 返回一个原字符串右对齐,并使用fillchar填充至长度width的新字符串,fillchar默认为空格 zfill(width) 返回长度为width的字符串,原字符串右对齐,前面填充0 # 字符串修改之对齐 str4 = 'hello python' print(str4.center(30,'-')) print(str4.ljust(30,'-')) print(str4.rjust(30,'-')) print(str4.zfill(30)) ''' 结果为: ---------hello python--------- hello python------------------ ------------------hello python 000000000000000000hello python '''
-
字符串修改之分割字符串(split、splitlines、partition)
方法名称 功能 split(seq=“”,num=string.count(str)) 以seq(默认为空格)为分隔符截取字符串,如果num有指定值,则仅截取num+1个子字符串(只需num个seq分隔符)。分割后得到一个新列表 rsplit 与split类似,但方向从右边开始分割 splitlines 按照行进行分割,得到新的列表 partition(str) 找到字符串第一个str,并以str为界,将字符串分割为3部分,返回一个新的元组 rpartition(str) 与partit类似,但方向从右边开始 # 字符串修改之分割字符串 str5 = 'hello world and hello python and hello you' print(str5.split('and',1)) print(str5.split()) # 默认为空格 print(str5.partition('and')) print(str5.rpartition('and')) str6 = '''hello world and hello python and hello you''' print(str6.splitlines()) ''' 结果为: ['hello world ', ' hello python and hello you'] ['hello', 'world', 'and', 'hello', 'python', 'and', 'hello', 'you'] ('hello world ', 'and', ' hello python and hello you') ('hello world and hello python ', 'and', ' hello you') ['hello world ', ' and hello python and', ' hello you'] '''
-
字符串修改之去掉两端多余字符串(strip)
方法名称 功能 lstrip(str) 去掉左边的str字符,默认为空白字符 rstrip(str) 去掉右边的str字符 strip(str) 去掉两边的str字符 # 字符串修改之去掉两端多于字符操作(strip) str = ' my name is tom ' print(str.strip()) # 结果为my name is tom
-
字符串判断(isidentifier、isspace、isalpha、isdecimal、isnumeric、isalnum等)
方法名称 功能 isidentifier 判断字符串是不是合法标识符 isspace 判断字符是否只有空白字符(回车、换行和水平制表符) isalpha 判断字符串是否全部由字母组成 isdecimal 判断字符是否由十进制的数字组成,不包括中文、罗马字符 isdigit 判断字符串只包含数字,不包括中文数字 isnumeric 判断字符串是否全部由数字组成,包括中文数字 isalnum 判断字符串是否由字母和数字组成 islower 判断字符串中的字符是否全部为小写,字符串至少有一个字符 isupper 判断字符串中的字符是否全部为大写,字符串至少有一个字符 istitle 判断字符串是否标题话 isascii 如果字符串为空或字符串中的所有字符都是ASCII,则返回Ture,否则返回False isprintalbe 如果所有字符都是可打印的,则返回Ture,否则返回False # 字符串判断 print('hello world'.isidentifier()) # False 空格为非法标识符 print(' t'.isspace()) # False t为非空 print('aldfwdad'.isalpha()) # True print('1546四'.isdecimal()) # False 中文不属于十进制 print('1546四'.isnumeric()) # True 包括中文数字 print('1546四'.isalnum()) # True print('1546四'.isdigit()) #False 不能包括中文 print(''.islower()) # False 不能为空字符串 print('TUHHH'.isupper()) #True print('My Name Is Tom'.istitle()) # True 每个单词第一个字符大写,其余小写 print('我是中国人'.isascii()) # False 中文不属于ASCII码 print('hello\nAre you ?'.isprintable()) # False \n 不可打印 ''' 结果为: False False True False True True False False True True False False '''
-
字符串判断之判断开头结尾字符串(startswith,endswith)
方法名称 功能 startswith() 检查字符串是否以str开头,若是则返回Ture endswith() 检查字符串是否以str结尾,若是则返回Ture # 判断开头结尾字符串 str = 'my name is tom' print(str.startswith('my')) # True print(str.endswith('is')) # False
-
字符串计数(count,len)
方法名称 功能 count(sub[,start=0[,end=len(string))]] 在字符串[start,end]范围内,计算sub字符串的个数 len len不是string的方法,是内置函数,计算字符串中的字符个数 # 字符串计数 str = 'my name is tom and your name is rock' print(str.count('name')) # 2 print(len(str)) # 36
-
字符串比较(max、min等)
比较规则:从第一个依次往下比较(比较的是oridinal value(原始值))
方法名称 功能 max(str) 返回字符串str中最大的字母 min(str) 返回字符串str中最小的字母 ord 将指定字符转换为原始值 chr 将原始值转换为对应的字符 # 字符串之比较 str = 'mynameistom' print(f'max(str):{max(str)} min(str):{min(str)}') print(ord('c')) print(chr(99)) ''' 结果为: max(str):y min(str):a 99 c '''
####列表(list)
格式
[数据1,数据2,数据3,数据4,.....]
# 列表可以一次性存储多个数据,且可以为不同数据类型
列表可以一次性存储多个数据,且可以为不同数据类型
常用操作
+++++
列表的操作可分为增、删、改、查
-
查
列表同字符串类似,也可采用索引和切片方式取到相应数据
以下三个方法或函数与字符串用法一致
index()
count()
len()
list = ['Tom','Lily','Rose'] print(list[0]) # Tom print(list[0:2]) # ['Tom', 'Lily'] print(list.index('Tom')) # 0 print(list.count('Tom')) # 1 print(len(list)) # 3
-
增
增加指定数据到列表中
方法名称 功能 append(数据) 在列表结尾增加数据,如果数据是一个序列,则将该序列作为一个整体添加到列表 extend(数据) 在列表结尾增加数据,如果数据是一个序列,则将序列的数据逐一添加到列表 insert(索引位置,数据) 在指定位置新增数据 list = ['Tom','Lily','Rose'] # 增加 append() list.append('张三') print(list) # ['Tom', 'Lily', 'Rose', '张三'] list.append([11,22]) print(list) # ['Tom', 'Lily', 'Rose', '张三', [11, 22]] # 列表属于可变数据类型 # extend() list.extend(['李四','王五']) print(list) # ['Tom', 'Lily', 'Rose', '张三', [11, 22], '李四', '王五'] # inser() list.insert(1,'小明') print(list) # ['Tom', '小明', 'Lily', 'Rose', '张三', [11, 22], '李四', '王五']
-
删
方法名称 功能 del 删除列表或指定数据 pop() 删除指定下标的数据(默认为最后一个),并返回该数据 remove() 移除列表中某个数据的第一个匹配项 clear() 清空列表 list = ['Tom','Lily','Rose'] # 删除 del del list[0] print(list) # ['Lily', 'Rose'] # pop() list.pop() print(list) # ['Lily'] # remove() list.remove('Lily') print(list) # [] list = ['Lily', 'Rose'] list.clear() print(list) # []
-
改
可直接修改指定下标的数据
# 修改 list = ['Tom', 'Lily', 'Rose', '张三'] list[0] = '李四' print(list) # ['李四', 'Lily', 'Rose', '张三']
方法名称 功能 reverse() 逆置 sort(key = None, reverse=False) 排序,其中revers表示排序规则,reverse=True 降序,reverse=False 升序(默认) # 修改 # reverse() list1 = [1,5,8,9,7,10] list1.reverse() print(list1) # [10, 7, 9, 8, 5, 1] # sort() list1.sort() print(list1) list1.sort(reverse=True) print(list1) # [10, 9, 8, 7, 5, 1]
-
其他
判断指定数据是否存在在某个列表序列中(in、not in)
# 判断是否存在 list = ['Tom','Lily','Rose'] print('Tom' in list) # Ture print('Tom' not in list) # False
复制(copy())
copy()
# 复制 copy() list = ['李四', 'Lily', 'Rose', '张三'] list2 = list.copy() print(list2) # ['李四', 'Lily', 'Rose', '张三']
循环遍历
-
while
list = ['Tom','Lily','Rose'] i = 0 while i < len(list): print(list[i]) i += 1
-
for
list = ['Tom','Lily','Rose'] for i in list: print(i)
#####嵌套使用
列表嵌套指的是一个列表里面包含其他子列表
list = [[1,2,3],[4,5,6],[7,8,9]]
# 可看成一个二维数组 索引 第一个[]表示外层,第二个[]表示内层列表
print(list[0]) # [1,2,3]
print(list[0][0]) # [1]
# 遍历
for i in list:
for j in i:
print(j)
元组(tuple)
++++
元组tuple可存储多个数据,但一旦初始化后元组内的数据不能修改
# 多个数据元组
t1 = (10,20,30)
# 单个数据元组
t2 = (10,)
print(type(t2)) # tuple
t3 = (10)
print(type(t3)) # int
t4 = ('hello')
print(type(t4)) # str
# 空元组
t5 = () # ()
注意: 若定义的元组只有一个数据时,要在该数据后面添加一个逗号,因为括号
()
既可以表示tuple,又可表示数学公式中的小括号,这就会产生歧义,因此,python规定,这种情况下,按小括号计算,所以只有一个元素的tuple时,要加一个逗号,
元组的常用操作
元组数据不支持修改,只支持查找
-
按索引查找
t = (1,2,3) print(t[0]) # 1
-
index()
t = (1,2,3) print(t.index(1)) # 0
-
count()
-
len()
元组内的直接数据如果修改则会立即报错,但如果元组里面有列表,修改列表里面的数据则是支持的
t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
print(t)
# ('a', 'b', ['X', 'Y'])
该tuple定义时有3个元素,分别是'a'
'b'
和一个list,表面上,tuple的元素确定变了,但其实变的并不是tuplt的元素,而是list的元素,tuple指向的list并没有发生改变,所谓tuple的’不变’,是tuple的每个元素,指向永远不变,即指向一个list,便不能改成指向其他对象,但指向的这个list本身是可变的
字典(dict)
特点
- 符号为大括号==
{}
== - 数据为键值对
key:value
形式出现 - 各个键值对之间用逗号
,
隔开
语法
# 有数据字典
dict1 = {'name':'Tom','age':20,'gender':'男'}
# 空字典
# 方式一
dict2 = {}
# 方式二
dict3 = dict()
常用操作
-
增
写法:字典序列[key] = 值
注意:
如果key存在则修改这个key对应的值;如果key不存在则新增此键值对
字典不支持索引
字典属于可变类型
# 增 dict1 = {'name':'Tom','age':21,'gender':'男'} print(dict1) # {'name': 'Tom', 'age': 21, 'gender': '男'} dict1['name'] = 'Rose' print(dict1) # {'name': 'Rose', 'age': 21, 'gender': '男'} # 如果key不存在,则新增 dict1['id'] = 1 print(dict1) # {'name': 'Rose', 'age': 21, 'gender': '男', 'id': 1}
-
删
方法名称 功能 del() / del 删除字典或删除字典中指定键值对 clear() 清空字典 # 删 dict2 = {'name':'Tom','age':21,'gender':'男'} # del() del dict2['name'] print(dict2) # {'age': 21, 'gender': '男'} # clear() dict3 = {'name':'Tom','age':21,'gender':'男'} dict3.clear() print(dict3) # {} # del 删除字典 del dict2 print(dict2) # 报错,'dict2' is not defined
-
改
写法:字典序列[kye] = 值
注意:
如果key存在则修改key对应的值;如果key不存在则新增此键值对
-
查
-
按key值查找
# 查 # 1.按key值查找 dict4 = {'name':'Tom','age':21,'gender':'男'} print(dict4['name']) # 结果为Tom print(dict4['age']) # 结果为21 print(dict4['id']) # 报错
如果当前查找的key存在,则返回对应的值;否则报错
-
方法/函数
方法名称 功能 get(key,default = None) 返回指定键的值,如果值不再字典中返回default值 keys() 以列表返回一个字典所有的键 values() 以列表返回一个字典所有的值 item() 以列表返回可遍历的(键,值)元组数组 dict5 = {'name':'Tom','age':21,'gender':'男'} # 2.函数/方法 # 2.1 get() print(dict5.get('name')) # Tom print(dict5.get('id',0)) # 0 # 2.2 keys() print(dict5.keys()) # dict_keys(['name', 'age', 'gender']) # 2.3 values() print(dict5.values()) # dict_values(['Tom', 21, '男']) # 2.4 items() print(dict5.items()) # dict_items([('name', 'Tom'), ('age', 21), ('gender', '男')])
-
字典的循环遍历
-
遍历字典的key
dict = {'name':'Tom','age':21,'gender':'男'} for key in dict.keys(): print(key) ''' 结果为: name age gender '''
-
遍历字典的value
dict = {'name':'Tom','age':21,'gender':'男'} for value in dict.values(): print(value) ''' 结果为: Tom 21 男 '''
-
遍历字典的元素(即键值对)
dict = dict = {'name':'Tom','age':21,'gender':'男'} for item in dict.items(): print(item) ''' 结果为: ('name','Tom') ('age',21) ('gender','男') '''
-
遍历字典的键值对
dict = dict = {'name':'Tom','age':21,'gender':'男'} for key,value in dict.items(): # 两个临时变量 元组数据1是字典的key 元组数据2是字典的value print(f'{key} = {value}') ''' 结果为: name = Tom age = 21 gender = 男 '''
-
注意:
dict = {'name':'Tom','age':21,'gender':'男'} for i in dict: print(i) # 如果直接遍历字典,结果如下,只会遍历字典的key ''' 结果为: name age gender '''
集合
+++++++
创建集合使用{}
或 set()
,但如果要创建空集合只能使用set()
,因为{}
用来创建空字典。
s = {10,20,30,4,50}
print(s) # {10,20,30,50,4}
s0 = {10,20,20,30,40,40}
print(s0) # {10,20,30,40}
s3 = {'abcdef'}
print(s3) #{'a','e','c','d','f','b'}
# 创建空集合
s1 = set()
print(type(s1)) # set
s2 = {}
print(type(s2)) # dict
注意:
集合的特点:
1.集合具有去重的特性,即不会出现重复的数据
2.集合数据没有顺序
集合常见操作方法
-
增加数据
方法名称 功能 add() 用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作(添加的必须是单一数据) update() 用于修改当前集合,可以添加新的序列到当前集合中,如果添加的元素在集合中已存在,则重复的会忽略(添加的必须是数据序列) # 增加 s = {10,20} print(s) # {10, 20} # add() s.add(100) print(s) # {100, 10, 20} # 集合为可变类型 s.add(100) print(s) # {100, 10, 20} 去重 s.add([10,20,30]) print(s) # 报错 # update() s.update([10,20,30,40,50]) print(s) # {100, 40, 10, 50, 20, 30} 重复的会省略 s.update(10) print(s) # 报错
-
删除数据
方法名称 功能 remove() 删除集合中的指定数据,如果数据不存在则报错 discard() 删除集合中的指定数据,如果数据不存在也不会报错 pop() 随机删除集合中的某个数据,并返回这个数据 # 删除 s = {10,20,30,40} # remove() s.remove(10) # {40, 20, 30} print(s) s.remove(50) # 报错 # discard() s.discard(20) print(s) # {40, 30} s.discard(50) print(s) # 不会报错 {40, 30} # pop() t = s.pop() print(s) # {30} print(t) # 40
-
查找数据
in: 判断数据在集合序列
not in :判断数据不在集合序列
# 查找 s = {10,20,30,40} print(10 in s) # True print(10 not in s) # False
如果你看到此处,我想我会很开心吧!
最后,分享一首诗,谢谢!
一生至少该有一次
为了某个人而忘了自己
不求结果
不求同行
不求曾经拥有
甚至不求你爱我
只求在我最美的年华里
遇见你