04-str和散列(dict,set)

  • 数值:int float bool complex
  • 序列:str list tuple
  • 散列:dict set
  • 可变对象:dict set list 地址不变
  • 不可变对象:数值、str、元组
  • 运算符:
    1. 成员运算符:in not in 包含关系
    2. 身份运算符:is not is 比较地址 内存池:-5~256
    3. 逻辑运算符: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中运算符分为:

  1. 算术运算符:主要用于两个对象算数计算(加减乘除等运算)
  2. 比较(关系)运算符:用于两个对象比较(判断是否相等、大于等运算)
  3. 赋值运算符:用于对象的赋值,将运算符右边的值(或计算结果)赋给运算符左边。
  4. 逻辑运算符:用于逻辑运算(与或非等)。
  5. 位运算符: 对Python对象进行按照存储的bit操作。
  6. 成员运算符:判断一个对象是否包含另一个对象。
  7. 身份运算符:判断是不是引用自一个对象

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('我读书少,别骗我,手机号都是数字哦!')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值