WEEK2:列表、字典、集合
- 标准库
- sys
- sys.path #打印环境变量
- sys.argv #打印相对路径,pycharm中显示绝对路径
- os
- cmd_res=os.system("dir") #执行dir命令,命令输出显示在终端,cmd_res为状态码
- cmd_res=os.popen("dir") #执行dir命令,命令输出到cmd_res中,想要读取结果,使用cmd_res.read()
- os.mkdir("new_dir") #创建目录
- os.mkdirs("new_dir/new_new_dir") #创建多级目录
- .pyc文件
- PyCodeObject是Python编译器真正编译的结果,存在于内存中
- 当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中
- 下次运行时直接加载pyc文件。当然运行时会检测py和pyc的修改时间,选择时间最新的
- sys
- 数据类型
- 数字
- int 整型
- float 浮点型
- complex 复数
- 布尔值
- 真或假,1或0
- 字符串
- 创建一个字符串就需要在内存中开辟一块连续的空间,一旦修改字符串,需要再次开辟空间,万恶的+号没出现一次就会在内存中重新开辟一块空间,因此能不用+号的时候尽量不用,字符串转成二进制 stringcontain.encode(encoding='utf-8')
- bytes类型
- 字节数据类型,即二进制数据,二进制转成字符串 bytescontain.decode(encoding='utf-8')
- 数字
- 三元运算
- result = 值1 if 条件 else 值2
条件为真,result=值1;否则, result=值2
- result = 值1 if 条件 else 值2
- 列表
names=["zhangyang",''guyun","xiangpeng","xuliangchen","zhangyang",["alex","jack"]]
names2=[1,2,3]
- 切片:
names[1:2] 为["guyun"]
names[-1] 为["xuliangchen"]
names[-2:] 为["xiangpeng","xuliangchen"] - 插入
末尾追加 names.append("leihaidong")
插入guyun前面 names.insert(1,"chenronghua")
将names2扩展到names中 names.extend(names2) - 改写
将guyun改为xiedi names[2]="xiedi"
将列表反转 names.reverse()
将列表排序 names.sort() #按照ASCII顺序排序 - 删除
删除xiangpeng names.remove("xiangpeng") 或者 del names[2] 或者 names.pop(2) #pop不加索引2,则默认删除最后一个
清空列表 names.clear()
删除列表 del names - 查询
查询guyun的索引位置 names.index("guyun")
统计zhangyang出现的次数 names.count("zhangyang") - 复制
- 浅复制
- 解释:浅复制只能复制列表的第一层(列表的第一层,就是names中的zhangyang、guyun等元素,列表的第二层是alex、jack等元素)
- 方法:
p1=names.copy()
p1=person[:]
p1=list(names)
或者使用copy模块
import copy
p1=copy.copy(names)
- 深复制
- 解释:开辟另外一块地址空间,存放同样的数据,原始数据改变之后,不影响复制的数据
- 方法:
import copy
p1=copy.deepcopy(names)
- 浅复制
- 切片:
- 元组:简单理解为只读列表,使用(),只有count和index这两个方法
- 字符串的操作
- 首字母大写 name.capitalize()
- 统计字符串中a的个数 name.count("a")
- 打印50个字符,使用-补齐,且将字符串放在中间 name.center(50,"-")
- 判断字符串是否以ex结尾或者开始 name.endswith("ex") name.startswith("ex")
- 将字符串中的\t转成30个空格 name.expandtabs(tabsize=30)
- 查找name在字符串中的起始索引位置 name.find("name")
- 将name字符串中的{name}和{year}替换成alex和23 name.format(name='alex',year=23)
- 效果同上 name.format_map( {'name':'alex','year':23} )
- 是否为只包含数字和字母的字符串 name.isalnum()
- 是否为纯英文字符串 name.isalpha()
- 是否为纯数字(是否为十进制数字) name.isdecimal()
- 是否为整数 name.isdigit()
- 判断是不是一个合法的标识符(变量名) name.isidentifier()
- 和name.isdigit()差不多的效果 name.isnumeric()
- 是不是空格 name.isspace()
- 判断每个单词的首字母是否大写 name.istitle()
- 将列表变成 字符串,元素与元素之间使用+号连接 "+".join(['1','2','3'])
- 补齐为50个字符,不足使用*在末尾补齐 name.ljust(50,"*")
- 补齐为50个字符,不足使用*在开始补齐 name.rjust(50,"*")
- 将字符串变为小写或者大写name.lower() name.upper()
- 从左边或者右边或者全部去掉空格和回车 name.lstrip() name.rstrip() name.strip()
- 将a对应为1,b对应为2...f对应为6 p=str.maketrans("abcdef","123456") print("alex li".translate(p)) 结果为"1l5x li"
- 将a替换成x,只替换一个 name.replace("a","x",1)
- 最右边那个e的索引 name.rfind('e')
- 将字符串按照空格转成列表 name.split()
- 按照换行来将列表转成列表 name.splitlines()
- 大写变小写,小写变大写 name.swapcase()
- 将每个单词的首字母变成大写 name.title()
- 用0在字符串开头填充为50长度 name.zfile(50)
- 字典操作
info={'stu1101':"tenglan wu",'stu1102':"longze luola",'stu1103':"xiaoze maliya"}
b={'stu1101':"alex",1:3,2:4}
- 查找 info["stu1101"] (查询value) info.get("stu1101")(不会报错的查询,安全的获取方法) "stu1104" in info(查询stu1104是否在info中)
- 修改或者添加 info["stu1101"]="WTL" info["stu1104"]="cangjingkong"
- 删除 del info["stu1101"] 或者 info.pop("stu1101")
- 取所有的键、值、键值对 info.keys() info.values() info.items()(可以将字典转成列表)
- 如果键存在则不修改,不存在则新建键值对 info.setdefault("大陆",{"xx":"asd"})
- 将b中的键值对更新和添加到info中 info.update(b)
- 初始化一个字典 c=dict.fromkeys([6,7,8],"test") #“test”属于类似浅复制
- 循环字典的方式
- 高效的方式
for i in info:
print(i,info[i]) - 低效的方式(存在一个将字典转成列表的过程)
for k,v in info.items():
print(k,v)
- 高效的方式
仰天大笑出门去,吾辈岂是蓬蒿人!