笔记--Day2--python基础2
一、鸡汤
1.提高自我修养
2.人丑就要多读书
3.多走走,开拓眼界
二、目录:
1.列表、元组操作
2.字符串操作
3.字典操作
- dict是无序的
- key必须是唯一的
4.集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集、子集、对称差集(反向差集)等关系
5.文件操作
文件操作流程:
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
文件操作模式:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
6.字符编码与转码
Python2中的字符串进行字符编码转换过程是:
- 字节串-->decode('原来的字符编码')-->Unicode字符串-->encode('新的字符编码')-->字节串
Python3中定义的字符串默认就是unicode,因此不需要先解码,可以直接编码成新的字符编码:
- 字符串-->encode('新的字符编码')-->字节串
三、练习
1.列表元组操作练习
#pycharm 5.0.3(python3.6)
#定义一个空列表
names = []
print('打印空列表names:',names)
#定义一个班级人员的列表
names = ['Alex','Felix','Fion','Susan']
#按下标取列表中的数据下标从0开始
print("取'Felix':",names[1])
#截取中间位置的人员 ,切片所取的位置包含其实位置,不包含结束位置(顾头不顾尾)
print('切片_方法1_明确位置:',names[1:3])
print('切片_方法2_取末尾:',names[-1]) #从右开始往左数是-1,-2.。。
print('切片_方法3_取最后边:',names[-3:-1]) #如果要取后3个的话,写-1就不行了,只能取2个:
print('切片_方法4_取最后边:',names[-3:]) #可以省略不写,这样就可以取多个了
print('切片_方法5_取前3:',names[0:3]) #起始位置可以写0,也可以忽略
print('切片_方法5_取前3:',names[:3]) #同上
print('切片_方法6_按步长:',names[0:-1:2])
print('列表的增删改查:'.center(40,'#'))
names.append('Bob') #追加_末位最佳
print('追加_末位追加:',names)
names.insert(1,'Jack') #追加_任意位置
print('追加_任意位置:',names)
names[2] = 'Wulin' #修改,将列表下边是2的名称修改掉
print('修改:',names)
names.remove('Wulin') #删除
print('删除_remove方式',names)
del names[1]
print('删除_del方式',names)
print(names.pop()) #不带下标,删除最后一个并返回删除的值
print('删除_pop方式',names) #删除后的结果
print('查找_找下标:',names.index('Fion'))#查找人员索引位置,没有回报错
print('查找_找下标_借下标打印出名称:',names[names.index('Fion')]) #看似多此一举
names.insert(1,'Fion')#班级姓名重复的情况,可以统计重复的个数
print('统计重复个数:',names.count('Fion'))
#清除列表clear name.clear
names.reverse()#反转
print('反转:',names)
names.insert(3,'4zhang') #插入数字开头的
names.insert(3,'!#woaini') #插入特殊字符开始的
names.sort()#排序
print('排序',names)
names2 = [12,34,5]
names.extend(names2)#将names2并入到name
print('打印合并后的两个列表:',names)
print('以下为浅复制相关'.center(50,'-'))#以下浅复制相关,需要记住这个特性,尽管用的较少
#列表中可以包含列表
names.insert(0,['age','grade']) #向列表中插入一个列表 #print('打印包含列表的列表:',names)
names3 = names.copy()#后边用到,浅copy,复制一个列表出来
print('打印copy前的列表:',names)
print('打印copy后的列表:',names3)
names[0][0] ='sex' #修改列表中列表的值
names[5] ='Wo' #修改names列表中Susan的名称为Wo,然后对比复制前复制后列表值的变化
print('打印修改后的列表:',names)
print('打印copy后的列表:',names3)
#对比以上4个打印结果可以发现,列表中列表的值names和names3都被修改了,但是列表中的值只有names里边被修改了,这个叫浅copy
#即只copy了第一层,由于列表中的列表只是个内存地址,所以修改names的列表中的列表的值后names3中的也跟着变了。
print('以下为深copy相关'.center(50,'-'))#一下深复制相关,不随便用,通常不需要随便复制一份(比如数据比较大的情况)
import copy #此时需要用到copy模块
print('打印深copy前的列表:',names)
names4 = copy.deepcopy(names) #调用copy模块的深copy
names[0][0] = 'home' #修改列表中列表的值
print('打印深copy后的列表:',names)
print('打印深copy后的列表:',names4) #可以发现列表没有变化
print('以下为列表的循环'.center(50,'-')) #
for i in names:
print(i)
print('以下为浅复制的一个场景'.center(50,'-'))
person = ['name',['saving',100]]
'''
#3中浅copy方式
p1 = copy.copy(person) #
p2 = person[:] #切片
p3 = list(person) #工厂函数
#浅copy什么情况下比较有用
'''
#有以下两个人,都基于person复制过来,两人有一个共同账号,如果一个少了50则另一个发现也少了50
p1 = person[:]
p2 = person[:]
p1[0]='Felix'
p2[0]='Fiona'
p1[1][1] =50 #公共账号少了50,那么两个人发现都少了50
print(p1)
print(p2)
列表代码
2.字符串操作练习
#pycharm 5.0.3(python3.6)
name = 'my \tname is felix {first},my age is {age}'
#pycharm有提醒功能,当输入name.的时候就会提醒字符串都有哪些操作,有两个下划线开始结尾的不用管
print('首字母大写:',name.capitalize())
print('统计个数',name.count('i'))
print('总共50个字符,不够的用-补齐:',name.center(50,'-'))
print('以什么结尾,匹配上则为真:',name.endswith('x'))
print('将tab转为多少个空格:',name.expandtabs(tabsize=20)) #在变量值中插入一个tab
print('查找,返回值所在的位置',name.find('is'))
#字符串的切片
print('字符串的切片:',name[name.find('is'):11])
print('格式化字符串,向{}中传值:',name.format(first='Song',age=23))
print('格式化字符串,传字典形式的值:',name.format_map({'first':'Song','age':12}))
print('ab23!'.isalnum()) #'是否是阿拉伯数字,如果里边有特殊字符返回false
print('ab'.isalpha())#是否是存英文字符
print('1A'.isdecimal())#是否是十进制
print(''.isdigit())#是否是整数
print('1A'.isidentifier()) #是否是一个合法的标识符 关注变量的命名规则,不符合的则为False
print('A'.islower()) #判断是不是小写
print(''.isnumeric()) #判断是不是一个数字,只识别整数
print(' '.isspace())#是否是空格
print('my name is '.istitle()) #判断一个字符串是不是title,每个首字母大写
print(''.isprintable())#是否可以打印,字符串不用考虑,比如还是tty文件
print('s'.isupper())#判断是不是大写
print('+'.join(['','','','']))#将列表中的字符串用某一个字符连接
print(name.ljust(50,'*')) #和center类似,50个字符,不够的用*号补齐
print(name.rjust(50,'*'))
print('FELIX'.lower())#把大写变成小写
print('felix'.upper())#把大写变成小写
print('\nFelix'.lstrip())# strip默认会去除两边默认的空格回车 ,lstrip是去除左边的空格回车
print('Felix\n'.rstrip())
print('Felix\n'.strip())# strip默认会去除两边默认的空格回车
print('------')
p = str.maketrans('abcdef','') # 做映射,可以做随机密码来玩
print('Felix'.translate(p))#
str = 'http://www.baidu.com/index'
print(str.partition('://'))#从左边找指定的分隔符将字符串进行分割
#返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。
print('Felix'.replace('i','I'))
print('felix songi'.rfind('i')) #从做往右,找到最右边那个值的下标返回
print(''.rindex(''))#返回子字符串 str 在字符串中最后出现的位置,如果没有匹配的字符串会报异常
str = 'http://www.baidu.com/index'
print(str.rpartition('/'))##从右边找指定的分隔符将字符串进行分割
print('fe li xl'.split(' '))
print('fe li\n xl'.splitlines()) #按换行来分
print('felix'.startswith('f')) #判断是否是什么开头的
print('Felix Song'.swapcase()) #大写边小写,小写边大写
print('Felix Song'.zfill(50)) #50个字符不够数的用0填充
练习代码
3.字典操作练习
#pycharm 5.0.3(python3.6)
#定义一个字段(key-value格式)
info = {
'stu1101':'TengLan Wu',
'stu1102':'LonZe Luola',
'stu1103':'XiaoZe Maliya',
}
print(info) #字典是无序的
#查,方法1,如果key不存在的话会出错
print('取字典中某一个key对应的值:',info['stu1101'])
#查,方法2,有就返回,没有就返回none,这是一种安排的方法
print(info.get('stu1104'))
#查,方法3,判断key在不在,不在就返回False
print('stu1104' in info)
#改
info['stu1101'] = '武藤兰'
#增,当key值不存在的时候会增加
info['stu1104'] ='Cangjingkong'
print(info)
#删除 del是python中的一个通用方法
del info['stu1101']
print(info)
#删除,pop删除,
info.pop('stu1102')
print(info)
#删除,popitem,随机删除
info.popitem()
print(info)
#更新update,
b = {
'stu1101':'Felix',
1:3,
2:5
}
info.update(b) #合并两个字段,有交叉则更新,没有则创建
print(info)
#fromkeys与info没什么关系,初始化一个列表,这个地方有个坑
c = info.fromkeys([6,7,8],[1,{'name':'alex'},444]) #相当于创建了一个字典
print(c)
c[7][1]['name'] = 'Fiona'#修改的时候会把fromkeys值都修改,类似于一个浅copy
print(info.items()) #将字典变成了大的列表
基本操作
#字典可以多级嵌套字典
China ={
'北京':{
'昌平':{
'沙河':['oldboy','test'],
'天通苑':['链家地产','我爱我家'],
},
'朝阳':{
'望京':['奔驰','陌陌'],
'国贸':['CICC','HP'],
'东直门':['Adent','wwo']
},
'广东':{
'东莞':{},
'佛山':{},
'广州':{},
},
}
}
#修改东直门下的公司名称(key尽量不要写中文)
China['北京']['朝阳']['东直门'][1] = 'Kaitong'
print(China)
#打印所有不包含key的值
print(China.values())
#打印所有key值
print(China.keys())
#setdefault 如果字典不存在可以新增,存在则返回key所对应的值
China.setdefault('陕西',{'宝鸡':{}})
China.setdefault('北京',{})
print(China)
print(China.setdefault('北京',{}))
多级嵌套
#pycharm 5.0.3(python3.6) info = {
'stu1101':'TengLan Wu',
'stu1102':'LonZe Luola',
'stu1103':'XiaoZe Maliya',
}
for i in info:
print(i) #只是打印了key
for i in info:
print(i,info[i]) #打印key和value,建议的循环方式
#上边的效果和下边的一致,但是上边的效果高,因为有一个字典转变为列表的过程
for k,v in info.items():
print(k,v)
字典的循环
4.集合操作练习
#pycharm 5.0.3(python3.6)
#定义列表,集合;列表转变为集合的方式就是用set()框起来
list_1 = [20,1,4,5,7,3,6,7,9]
list_1 = set(list_1) list_2 = set([2,6,0,66,22,8,4])
print(list_1,type(list_1))
print(list_2,type(list_2)) #交集
print('交集:',list_1.intersection(list_2))
print('交集运算符',list_1 & list_2)
#并集
print('并集:',list_1.union(list_2))
print('并集运算符:',list_1 | list_2)
#差集
print('差集(1有2没有):',list_1.difference(list_2))
print('差集(2有1没有)',list_2.difference(list_1))
print('差集运算符(1有2没有)',list_1 - list_2)
print('差集运算符(2有1没有)',list_2 - list_1)
list_3 = set([1,3,7])
#子集 (前边的是不是后边的子集或者父集),子集没有专门的运算符
print('子集(1是不是2的子集):',list_1.issubset(list_2))
#父集
print('父集(1是不是2的父集):',list_1.issuperset(list_2))
print('子集(1是不是3的子集):',list_1.issubset(list_3))
print('父集(1是不是3的父集):',list_1.issuperset(list_3)) #对称差集(反向差集):把两个都有的去掉
print('对称差集',list_1.symmetric_difference(list_2))
print('对称差集运算符',list_1 ^ list_2)
print('遗漏'.center(50,'#'))
#判断两个是否有交集,有返回fase,没有返回true
list_4 = set([5,6,8])
print(list_4.isdisjoint(list_3))
print(list_1.isdisjoint(list_2)) #pop 任意删除一个,并返回一个值
print('删除任意一个并返回其值:',list_1.pop())
print('删除任意一个并返回其值:',list_1.pop())
#discard删除一个值,如果值有则删除,如果没有返回空不报错,remove会报错
list_1.discard(7) #discard删除一个值
print('discard删除一个值后list_1结果:',list_1)
list_1.discard(1000)#删除一个不存在的值,这里什么也不做也不会报错
print('discard删除一个值list_1结果::',list_1) print('集合的增删改查'.center(30,'-'))
#增加
list_1.add(2000)
print('增加一个:',list_1)
#增加多项
list_1.update([20,40,555])
print('增加多个:',list_1)
#删除,值不存在的时候会报错
list_1.remove(2000)
print('移除:',list_1)
#长度判断
print('长度',len(list_1))
#成员判断:判断20是否在list_1中
print('成员判断:',20 in list_1)
print('成员判断:',1000 not in list_1)
#copy:浅复制
集合代码
5.文件操作
#pycharm 5.0.3(python3.6)
#文件的打开、读写操作
#读:
'''
f = open('yesterday2','r',encoding='utf-8') #打开文件 (此处如果不加编码格式,windows默认编码是gbk,而python默认是utf8
#的)所以需要指定编码用utf-8打开文件
data = f.read() #文件打开了只是一个内存对象,所以需要赋变量的形式进行操作
data2 = f.read() #上边读完了,此时在读的话是从末行开始读,所以这里读的内容是空的。
print(data)
print('data2:',data2) #打印内容为空理解(读文件的时候相当于是有个光标的东东,python会记录光标的位置,我们要想从任意位置
#读取的话就可以通过操作光标实现)
''' #写
'''
f = open('yesterday2','w',encoding='utf-8') #写的话需要在open中加上打开文件的模式'w'(默认读模式)
f.write('I love you Fiona,\n') #open模式中只写‘w’相当于是创建一个文件*慎用*,会把原文件清空
f.write('very much') #第一行内容不带\n的话会写在同一行
''' '''
#'a' 追加的话需要在open中加上打开文件的模式(默认读模式),相当于append(在末尾增加)
f = open('yesterday2','a',encoding='utf-8')
f.write('hahhhhhhh\n')
f.write('luhaluhaluha')
f.close() #写完文件要把文件关闭
''' #读2行
'''
#readlin默认读文件中的一行
f = open('yesterday','r',encoding='utf-8')
print(f.readline())
print(f.readline())
'''
#读5行,可以用循环
'''
f = open('yesterday','r',encoding='utf-8')
for i in range(5):
print(f.readline().strip()) #strip可以去除两边的换行和空格
''' #需求:读多行,readlines读所有的文件,在第10行的位置打印一个分割线
'''
f = open('yesterday','r',encoding='utf-8')
#print(f.readlines()) #读所有的行放到一个列表
#print(list(enumerate(f.readlines()))) #解决:通过for循环可以把这个列表的数据取出来,通过enumerate将列表的下标和值存成元组形式,然后在赋两个值
for index,line in enumerate(f.readlines()):
if index ==9:
print('我是分割线')
continue
print(line.strip())
''' #需求,readlines只适合读小文件,读大文件怎么办 :读一行删一行,内存只存一行
#此时文件变成了一个迭代器,无法通过枚举取下标了
'''
f = open('yesterday','r',encoding='utf-8')
count = 0
for line in f:
if count == 9:
print('我是分割线')
count += 1
continue
print(line)
f.close()
'''
文件操作
#pycharm 5.0.3(python3.6)
#需求:怎么将光标移动,获取想要打印的内容呢?
f = open('yesterday','r',encoding='utf-8')
print(f.tell()) #打印光标位置 ,按字符的个数计数
print(f.readline())
print(f.readline())
print(f.readline())
print('总共读了几个字符:',f.tell())
print('光标返回到第几个字符:',f.seek(0)) #一般是0,回到头,像tty等设备是无法移动
print(f.readline())
print('判断光标是否可移动:',f.seekable())
print('打印文件的编码:',f.encoding)
print('反应文件句柄在内存的编号:',f.fileno()) #返回文件句柄在内存中的编号
print('打印文件名称:',f.name)
print('是不是终端设备:',f.isatty())
print('判断文件是否可读:',f.readable())
print('判断文件是否可写:',f.writable()) print('强制刷新:',f.flush()) #将缓存中的数据立马写入硬盘,系统默认会等到缓存满了才写到硬盘中
print('判断文件是否关闭:',f.closed)
print('关闭文件',f.close())
print('判断文件是否关闭:',f.closed)
#print('清空',f.truncate()) 打开文件模式‘a’ 从头开始截断,
基本操作
#进度条实现
import sys,time #导入系统和时间模块 for i in range(20):
sys.stdout.write('#')
sys.stdout.flush() #刷到内存上
time.sleep(0.1) #隔01秒打印1次
进度条
#pycharm 5.0.3(python3.6)
#文件的读写
'''
f = open('yesterday','r+',encoding='utf-8')
print(f.readline())
print(f.readline())
print(f.readline())
f.write('====================')#只能写到最后
print(f.readline())
'''
#文件的写读
'''
f = open('yesterday3','w+',encoding='utf-8')
f.write('=========wo==========\n')
f.write('=========wo==========\n')
f.write('=========wo==========\n')
f.write('=========wo==========\n')
print(f.tell())
f.seek(10)
print(f.readline())
f.write('ninini') #只能写在末尾,与硬盘存储机制有关
f.close()
'''
#追加读 a+ #以二进制方式读[FTP传输、网络传输、视频文件]
'''
f = open('yesterday3','rb')
print(f.readline())
'''
#以二进制方式写
f = open('yesterday3','wb')
f.write('hello world\n'.encode())
f.closed #追加二进制,ab
文件的修改
#pycharm 5.0.3(python3.6)
#方式一、vim的方式,将文件全部加载到内存,然后全部保存到内存中
#方式二、修改好以后写到新的文件
# (边读边写),需要打开两个文件
f = open('yesterday','r',encoding='utf-8')
f_new = open('yesterday.bak','w',encoding='utf-8') for line in f:
if 'me' in line:
line = line.replace('me','Felix')
f_new.write(line)
f.closed()
f_new.closed()
文件的修改2
四、参考
http://www.cnblogs.com/apff/p/7455410.html
http://www.cnblogs.com/alex3714/articles/5717620.html <博主博客记录>
http://www.runoob.com/
注:本笔记基于“老男孩python14期百度传课视频”,地址:https://chuanke.baidu.com/v3628575-182242-1134376.html
笔记--Day2--python基础2的更多相关文章
- Day2 - Python基础2 列表、字典、集合
Python之路,Day2 - Python基础2 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一, ...
- 【笔记】Python基础一 :变量,控制结构,运算符及数据类型之数字,字符串,列表,元组,字典
一,开发语言介绍 高级语言:Java,C#,Python ==>产生字节码 低级语言:C,汇编 ==>产生机器码 高级语言开发效率高,低级语言运行效率 ...
- python笔记之python基础
python基础语法 1.变量命名规则 1).变量必须以字母或者下划线_开头 2).变量可由字母.数字.下划线_组成 3).变量对大小写敏感 2.多行语句 当编写的代码较长,需要换行,可使用 \ 进行 ...
- 风变编程笔记(一)-Python基础语法
第0关 print()函数与变量 1. print()函数print()函数:告诉计算机,把括号的内容显示在屏幕上 # 不带引号 print(1+1) # 让计算机读懂括号里的内容,打印最终的结果 ...
- Python之路,Day2 - Python基础2
def decode(self, encoding=None, errors=None): """ 解码 """ ""& ...
- 【学习笔记】Python基础教程学习笔记
教程视频网盘共享:http://pan.baidu.com/s/1hrTrR5E 03-python基础.if判断 print 输出数据 print("hahahah")----- ...
- Python之路,Day2 - Python基础,列表,循环
1.列表练习name0 = 'wuchao'name1 = 'jinxin'name2 = 'xiaohu'name3 = 'sanpang'name4 = 'ligang' names = &quo ...
- Python学习笔记1——Python基础
一. 数据类型和变量 整数:十六进制用0x前缀和0-9,a-f表示 浮点数:小数,科学计数法:10用e代替:整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(包括除法),浮点数运算则可 ...
- Day2 - Python基础2习题集
1.购物车程序 product_list = [ (), (), (), (), (), (), ] shooping_list = [] salary = input("Input you ...
- Day2 python基础学习
http://www.pythondoc.com/ Python中文学习大本营 本节内容: 一.字符串操作 二.列表操作 三.元组操作 四.字典操作 五.集合操作 六.字符编码操作 一.字符串操作 1 ...
随机推荐
- C# 线程同步计数存在的问题
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- 题解 P1016 旅行家的预算
题目传送门(以纪念调了两个半小时的单调队列) emmm这题单调队列可海星... 因为每个点有油量无限的,但是油箱容量是无限的(正好反的一道题 SP348 EXPEDI - Expedition) 所以 ...
- Codeforces 126B(kmp)
要点 头尾的最长相同只要一个kmp即可得,于是处理中间部分 扫一遍记录一下前缀的每个位置是否存在一个中间串跟它相同,见代码 如果当前没有,接着用Next数组去一找即可 #include <cst ...
- C#中的XML文档注释-推荐的文档注释标记
文档注释是为了方便自己和他人更好地理解代码所实现的功能.下面记录了一些常用的文档注释标记: <C> 用法: <c>text</c> 将说明中的文本标记为代码.例如: ...
- App配置页面头部
记录一下 App配置页面头部 例 上图红色框部分就是自己配置的头部 //我的客户 "/OACustomer/Index": { title: "我的客户", h ...
- hard link && symbolic link
hard link :硬连接,多了一个inode,指向原始的inode,通过这个硬连接删除文件,文件不会被真正删除,而是删除这个inode symolic link:符号连接相当于快捷方式
- 1g免费空间永久使用
云邦互联免费空间(免备案,无广告) [1G免费全能空间,免备案,无广告] 1G全能空间 + 100M数据库(Mysql 5.5 / SQL Server 2005) 支持的脚本:ASP.PHP(5.2 ...
- HDU 3530Subsequence(单调队列)
题意 题目链接 给出$n$个数,找出最长的区间,使得区间中最大数$-$最小数 $>= m$ 且$<= k$ Sol 考虑维护两个单调队列. 一个维护$1 - i$的最大值,一个维护$1 - ...
- Effective C++ 重要条款
学习c++的童鞋们,这本书不能错过,最近在学校图书馆借来这本书,准备好好啃啃它了,先把它的基本内容过一遍吧. 改变旧有的的C习惯 条款1:尽量以const和inline取代#define. 条款2:尽 ...
- python(一)
1 python安装 先安装python,之后安装pycharm 创建工程时需要关联解释器路径: 2 python运行 先编译后解释 .py--.pyc文件---解析----结果 .pyc的目的是减少 ...