Python高级
字符串
获取字符串中元素
和列表一样,字符串也是通过索引获取元素
str="hello"
print(str[0])
遍历字符串
可以通过for
循环遍历字符串
str = 'hello'
for ele in str:
print(ele)
h
h
e
l
l
o
字符串的常见操作
判断
方法 | 说明 |
---|---|
isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True |
isdecimal() | 如果 string 只包含数字则返回 True |
startwith(str) | 检查字符串是否是以 str 开头,是则返回 True |
endswith(str) | 检查字符串是否是以 str 结束,是则返回 True |
查找替换
方法 | 说明 |
---|---|
find(str, start=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1 |
rfind(str, start=0, end=len(string)) | 类似于 find(),不过是从右边开始查找 |
replace(old_str, new_str, num=string.count(old)) | 返回一个新字符串,把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次 |
str="hello"
#find(str, start=0, end=len(string))
print(str.find('lo',0,len(str)))
#rfind(str, start=0, end=len(string))
print(str.rfind('lo',0,len(str)))
#replace(old_str, new_str, num=string.count(old)) 如果不指定替换的个数num,则默认都替换
print(str.replace("l","L",1))
切割
方法 | 说明 |
---|---|
split(str="", maxsplit) | 返回列表,以 str 为分隔符拆分 string,如果 maxsplit 有指定值,则仅分隔 maxsplit + 1 个子字符串,str 默认包含\\r , \\t , \\n 和空格 |
str2="1|2|3"
print(str2.split('|'))
print(type(str2.split('|')))
['1', '2', '3']
<class 'list'>
去空白
方法 | 说明 |
---|---|
strip() | 返回新字符串,截掉 string 左右两边的空白字符(可以指定截掉的字符) |
str3=" hello "
print(str3.strip())
set集合
set
被称为集合,是无序的,并且集合中的元素是唯一的
集合的创建
s = {'张三','李四','王五'}
print(s)
集合是无序的
打印结果:
{'李四', '张三', '王五'}
集合元素唯一
s = {'张三','李四','王五','张三'}
print(s)
打印结果:
{'王五', '张三', '李四'}
遍历集合
s = {'张三','李四','王五'}
# 遍历集合
for ele in s:
print(ele)
添加元素
集合可以通过add
方法添加元素
s = {'张三','李四','王五'}
# # 添加赵六 add
s.add('赵六')
删除元素
①remove
删除,如果有 直接删除,如果没有 程序报错
s = {'张三','李四','王五'}
# 删除张三
s.remove('张三')
②discard
删除(安全),元素存在则直接删除,如果元素不存在,则不做任何操作
s = {'张三','李四','王五'}
# discard 删除元素 如果元素不存在,不做任何处理
s.discard('林青霞')
③pop
删除,随机删除集合中的元素并返回,如果集合中没有元素,则程序报错
s = {'张三','李四','王五'}
# pop 随机删除
print(s.pop())
dict字典
- 字典同样可以用来存储多个数据
- 字典使用键值对存储数据
定义
d = {'中国':'China','英国':'England','美国':'America'}
字典的特点
字典中的键相当于索引,必须是唯一的
d = {'中国':'China','英国':'England','美国':'America','美国':'USA'}
print(d)
打印:
{'中国': 'China', '英国': 'England', '美国': 'USA'}
字典增删改查
增加
d = {'中国':'China','英国':'England','美国':'America'}
# 添加 法国
d['法国'] = 'France'
也可以通过setdefault方法添加
d.setdefault('法国','France')
如果字典中原来存在这个key,则添加后会覆盖
删除
d = {'中国':'China','英国':'England','美国':'America'}
# 删除美国 如果键不在字典中,会报错
del d['法国']
也可以通过pop删除
# pop 删除元素 并且返回删除元素的值 如果删除不存在会报错
result = d.pop('法国')
清空字典
# 清空容器中的数据 还可以继续使用
d.clear()
修改
d = {'中国':'China','英国':'England','美国':'America'}
# 修改美国
d['美国'] = 'USA'
查询
d = {'中国':'China','英国':'England','美国':'America'}
# 查找中国
value = d['中国']
print(value)
字典遍历
1、遍历所有的键值对
d = {'中国':'China','英国':'England','美国':'America'}
for ele in d:
print(ele,d[ele])
结果:
中国 China
英国 England
美国 America
2、遍历所有的键
d = {'中国':'China','英国':'England','美国':'America'}
for key in d.keys():
print(key)
结果:
中国
英国
美国
3、遍历所有的值
d = {'中国':'China','英国':'England','美国':'America'}
for value in d.values():
print(value)
结果:
China
England
America
4、遍历所有的键值对
d = {'中国':'China','英国':'England','美国':'America'}
for key,value in d.items():
print(key,value)
结果:
中国 China
英国 England
美国 America
slice切片
取一个str
、list
、tuple
的部分元素
- 切片 译自英文单词
slice
,指的是一部分 - 切片 根据 步长
step** **
从原序列中取出一部分元素组成新序列 - 切片适用于 字符串、列表、元组
格式
字符串[开始索引:结束索引:步长]
包含开始索引, 不包含结束索引
string = '中华人民共和国欢迎您'
# 获取前三个文字
newStr = string[0:3:1]
步长默认为1,可以省略,如下
newStr = string[0:3]
开始索引为0,可以省略,如下
newStr = string[:3]
如果到末尾结束,可以省略结束索引,例如取后三个字“欢迎您”
newStr = string[7:]
索引的正序和倒序
索引分为正序和倒序
- 正序:从左向右,
0
开始 - 倒序:从右向左,
-1
开始
# 开始位置:正序 结束位置:倒序
str="中华人民共和国欢迎你"
print(str[7:-1])
打印结果:
欢迎
步长为负数
步长也可以为负数,代表逆序切片
ss = "中华人民共和国欢迎您"
# 把从角标为2到7(包含)倒序打印出来
# 欢国和共名人
print(ss[7:1:-1])
打印结果:
欢国和共民人
推导式
推导式指的是轻量级循环创建数据的方式,对列表或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;或用满足特定条件的元素创建子序列。
推导式包括:
- 列表推导式
- 元组推导式
- 集合推导式
- 字典推导式
列表推导式
列表推导式的格式:[计算公式 for循环 if判断]
通过列表推导式快速创建[1, 11)
所有数字的列表
lst=[i for i in range(0,11)]
print(lst)
通过列表推导式快速创建[1, 11)
所有偶数的列表
lst=[i for i in range(0,10) if i%2==0 ]
print(lst)
通过列表推导式快速创建[1, 11)
所有偶数的平方的列表
lst=[i**2 for i in range(0,10) if i%2==0 ]
print(lst)
元组推导式
元组推导式的格式:**(计算公式 for循环 if判断)**
,其他与列表推导式一致
tp =(ele for ele in range(1, 11))
集合推导式
集合推导式的格式:**{计算公式 for循环 if判断}**
,其他与列表推导式一致
s = {ele for ele in range(1, 11)}
字典推导式
zip(..., ...)
将range(1,10)
和range(21,30)
里的每个元素一一组合成元组
z=zip(range(0,10),range(21,33)) #如果两边位数不相等,以位数少的为准
print(list(z))
[(0, 21), (1, 22), (2, 23), (3, 24), (4, 25), (5, 26), (6, 27), (7, 28), (8, 29), (9, 30)]
所以字典推导式为
z=zip(range(0,10),range(21,33))
_dict={key:value for key,value in list(z)}
print(_dict)
内置函数
高级变量类型有一些公共的内置函数,如下
函数 | 描述 | 备注 |
---|---|---|
len(items) | 计算容器中元素个数 | |
del item | 删除变量 | |
max(items) | 返回容器中元素最大值 | 字典只比较key |
min(items) | 返回容器中元素最小值 | 字典只比较key |
len 长度
str = 'hello'
print(len(str))
结果:
5
del 删除
lst = [1,2,3]
del lst[0]
print(lst)
结果:
[2,3]
运算符
运算符 | 描述 | 支持的数据类型 |
---|---|---|
+ | 合并 | 字符串、列表、元组 |
* | 重复 | 字符串、列表、元组 |
in | 是否存在(字典中判断键) | 字符串、列表、元组、集合、字典 |
not in | 是否不存在(字典中判断键) | 字符串、列表、元组、集合、字典 |
> >= == < <= | 比较(==以外的较少使用,逐个比较元素) | 字符串、列表、元组 |
in
和not in
str = 'hello'
# h是否在str中
result = 'h' in str
print(result)
result = 'h' not in str
print(result)
结果:
True
False
+
合并
只有字符串、列表、元组可以合并
- 字符串
# 字符串
str1 = 'hello'
str2 = 'world'
str = str1 + str2
- 列表
lst1 = [1,2,3]
lst2 = [4,5,6]
lst = lst1 + lst2
- 元组
t1 = (1,2,3)
t2 = (4,5,6)
t = t1 + t2
*
重复
只有字符串、列表、元组可以
str = 'hello'
print(str*3)
l = [1,2,3]
print(l * 3)
t = (1,2,3)
print(t * 3)
结果:
hellohellohello
[1, 2, 3, 1, 2, 3, 1, 2, 3]
[1, 2, 3, 1, 2, 3, 1, 2, 3]