- 数值:int float bool complex
- 序列:str list tuple
- 散列:dict set
- 可变对象:dict set list 地址不变
- 不可变对象:数值、str、元组
- 运算符:
- 成员运算符:in not in 包含关系
- 身份运算符:is not is 比较地址 内存池:-5~256
- 逻辑运算符:not > and > or
一 字符串str
- 字符串不可修改 # st[0] = 3 报错
- 如果需要修改str,需要调用str内置方法并重新赋值
1.str的修改
st = 'hello world oo '
li = [1, 2, 3, 4]
# replace 临时替换
st1 = st.replace('hello', 'moran') # 改变值需要替换 本身不变 地址不一样
st1 = st.replace('o', 'w') # 左-替换成->右 替换所有值
st2 = st.replace('o','w',2) # 替换前2的值
st3 = st.replace('o','w',1) # 替换第1个值
u = st.upper() # 全变成大写
l = st.lower() # 全变成小写
c = st.capitalize() # 字符串首字母大写
t = st.title() # 单词首字母大写
s = st.strip() # 字符串去掉两边空格
ls= st.lstrip() # 去左边空格
rs = st.rstrip() # 去右边空格
2.str的切割
sp = st.split() # 分割成list列表,默认以空格(1个或多个)分割字符串
sp_l = st.split('l') # 以字符l分割全部字符串
st1 = ''.join(st.split()) # 去掉所有空格,返回str
st2 = st.replace(' ', '')
sp_l_2 = st.split('l',2) # 分割前2个l
3.str的查找
# 字符串查找下标 find()只能字符串用
print(st.index('o')) # 找不到会报错
print(st.index('o',5))
print(st.find('o')) # 找不到则返回-1
print(st.find('o',5)) # 从第5位置开始找
4.str的判断方法
print('判断全是字母(不包括空格和符号):isalpha()',st.isalpha())
print('判断全是数字:isdigit()',st.isdigit())
print('判断全是小写:islower()',st.islower())
print('判断全是大写:isupper()',st.isupper())
5.str的转义
- \反斜杠+字母/符号
- r转义
# 多行字符串''' '''
st1 = '''
a
b'''
st2 = '''hello\nworld'''
# \t 水平制表符 一个占8个格子
st2 = 'hello\twor\tld\t'
st2 = 'hello world i\' am'
# \a \b在系统命令行cmd中有效
st3 = 'abc\bde'
print(r'\b 退格符',st3)
st3 = 'hello\aworld'
print(r'系统提示音\a',st3)
# r去除 字符串 \反斜杠 转义
st2 = r'E:\a\b'
print(r'去除\反斜杠转义',st2)
5.str的编码
# 编码
mr = '墨染'.encode('utf-8')
# 解码
mr.decode('utf-8')
二 字典dict
-
键值对
-
键唯一/不重复
定义
dic = {} # 空字典
dic = dict(name='moran',age=18) # 键值对
1.dict的查询
- 查询[’’]:键不存在,则报错
dict_1 = {'缔凡': '缔造非凡未来', '抖音': '记录美好生活', '阿里': '让天下没有难做的生意'}
print(dict_1['缔凡']) # 键不存在,则报错
print(dict_1.get('缔凡', '未找到')) # 不会报错,键不存在默认返回None,可以指定返回内容
# setdefault() 有则查,无则增
# 查询所有的键keys()
print(list(dict_1.keys())) # 列表字典转为列表
# 查询所有的键values()
print(list(dict_1.values()))
# items() 字典 转为 元组列表字典
print(dict_1.items())
2.dict的添加
# setdefault() 有则查,无则增,不会添加重复值
print(dict_1.setdefault('缔凡', 'difan'))
dict_2 = dict(a=1, b=2)
dict_2['a'] = 3 # 有则改,无则增
dict_2.update({'a': 1, 'b': 2}) # 批量 有则改,无则增
3.dict的修改
dict_2['a'] = 3 # 有则改,无则增
dict_2.update({'a': 1, 'b': 2, 'c' : 3}) # 批量 有则改,无则增
4.dict的删除
- 3.6以后 – 字典是后进先删除 popitem()
- 集合set是先进先删除 字典dict是后进先删除
dict_1.pop('墨染') # pop()根据键删除
dict_1.popitem() # 删除最后一个
三 集合set
- 只有键没有值,去重复,唯一性,无序性
定义
set_1 = set() # 空集合
set_1 = {'a', 'bbb', 'ccd', '112'}
1.set的增
set_1 = {1, 2, 3, 4}
set_2 = {3, 4, 5, 6}
a = set_1.add(4) # a内存地址改变 type(a)类型改变为NoneType
b = set_2.update({4, 5, 6, 7, 8, 8}) # 批量增加 b内存地址改变
2.set的删
- 集合set是先进先删除 字典dict是后进先删除
print(set_1.pop()) # 删除第1个 返回删除值
set_1.remove(3) # 根据 值 删除
3.set的运算
print("交集&", set_1 & set_2)
print("并集|", set_1 | set_2)
print('差集-', set_1 - set_2)
5.set的判断方法
# 判断集合与集合之间的关系
b = set_1.isdisjoint(set_2) # 判断是否无&交集
print('isdisjoint()没有交集返回True,有交集返回False:', b)
b = set_1.issubset(set_2) # 判断是否被包含于
print('issubset()判断集合1是否被包含于集合2,包含返回True', b)
b = set_1.issuperset(set_2) # 判断是否包含于
print('issuperset()判断是否包含于,包含返回True:', b)
四 运算符总结
Python中运算符分为:
- 算术运算符:主要用于两个对象算数计算(加减乘除等运算)
- 比较(关系)运算符:用于两个对象比较(判断是否相等、大于等运算)
- 赋值运算符:用于对象的赋值,将运算符右边的值(或计算结果)赋给运算符左边。
- 逻辑运算符:用于逻辑运算(与或非等)。
- 位运算符: 对Python对象进行按照存储的bit操作。
- 成员运算符:判断一个对象是否包含另一个对象。
- 身份运算符:判断是不是引用自一个对象
1.Python算术运算符优先级
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 ‘AND’ |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is,is not | 身份运算符 |
in,not in | 成员运算符 |
not,and,or | 逻辑运算符 |
五 练习
# 1.两个列表中找出相同的元素
li = [3, 4, 5, 6, 3, 6, 7, 8, 4, 7]
li2 = [6, 7, 4, 6, 8, 9, 4, 5, 1, 2]
print(list(set(li) & set(li2))) # 转为集合去重求交集 集合转列表
li3 = []
for i in li:
if i in li2 and i not in li3:
li3.append(i)
print(li3)
# 2.统计每个字符出现的次数
st = 'gfgsdfhdshwerguyerth'
dict_1 = {}
for i in st:
dict_1[i] = '{:.3f}'.format(st.count(i) / len(st))
# dict_1[i] = '%.3f' % (st.count(i)/len(st))
# dict_1.update({i:st.count(i)/len(st)})
print(dict_1)
# 3.随机生成10个8位密码
import random
s = '0123456789abcdefghijklmnopqrstuvwxyz'
pwd = []
for i in range(10):
r = ''.join(random.choices(s, k=8))
pwd.append(r)
print(pwd)
# 4.判断输入的是不是手机号码,是不是以13开头
#while True:
phone = input('请输入手机号码(11位):')
if phone.isdigit():
if len(phone) == 11:
if phone[0:2] == '13':
# if phone.startswith('13'):
print('该号码以13开头')
else:
print('这不是以13开头的手机号哦!')
else:
print('手机号码位数不对')
else:
print('我读书少,别骗我,手机号都是数字哦!')