python之二 基础 一
- 本章节 主要内容
- 列表, 元组
- 字符串操作
1. 列表,元组
列表是最常用的数据类型之一,通过列表可以对数据实现最方便的存储,修改等操作
定义列表
name = [ 'zhansan','lisi','wangwu' ] 列表使用的是[ ]中括号 可以增删该差 但是元组不能 ,
1 通过下标访问列表中的元素,下标从0开始计数 2 3 >>> name[0] 4 'zhangsan' 5 6 >>> name[1] 7 'lisi' 8 >>> name[2] 9 'wangwu' 10 11 >>> name[0:1] #下面这些在去下标的时候 顾首不顾尾 12 ['zhangsan'] 13 >>> name[0:2] 14 ['zhangsan', 'lisi'] 15 >>> name[0:3] 16 ['zhangsan', 'lisi', 'wangwu'] 17 18 这些就称为下标 19 20 切片:取多个元素 21 >>> name = ['zhangsan','lisi','wangwu','zhaoliu','xiaoqi','xiaojiu'] 22 >>> name[1:4] 23 ['lisi', 'wangwu', 'zhaoliu'] #取下标1至下标4之间的数字,包括1,不包括4 24 >>> 25 >>> name[1:-1] 26 ['lisi', 'wangwu', 'zhaoliu', 'xiaoqi'] #取下标1至-1的值,不包括-1 27 >>> 28 >>> name[0:3] 29 ['zhangsan', 'lisi', 'wangwu'] 30 >>> 31 >>> name[:3] 32 ['zhangsan', 'lisi', 'wangwu'] #如果是从头开始取,0可以忽略,跟上句效果一样 33 34 >>> name[3:] 35 ['zhaoliu', 'xiaoqi', 'xiaojiu'] #如果想取到最后可以这样写 36 37 >>> name[0::2] 38 ['zhangsan', 'wangwu', 'xiaoqi'] #后面的2 代表,每隔一个元素,就取一个 39 >>> name[::2] 40 ['zhangsan', 'wangwu', 'xiaoqi']
1 追加 2 3 >>> name 4 ['zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu'] 5 >>> name.append("add") #会把add添加到列表的后面 6 >>> name 7 ['zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add'] 8 9 插入 10 11 >>> name 12 ['zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add'] 13 14 name.insert(2,"insert") #把inster添加到 wangwu前面 15 16 >>> name 17 ['zhangsan', 'lisi', 'inster', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add'] 18 19 20 21 修改 22 23 >>> name 24 ['zhangsan', 'lisi', 'inster', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add'] 25 >>> name[1]="wang" #把lisi改成wang 26 >>> name 27 ['zhangsan', 'wang', 'inster', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add'] 28 29 30 31 删除 #删除有三种操作 del, remoce删除指定元素 , pop 删除列表最后一个 32 33 >>> name 34 ['zhangsan', 'wang', 'inster', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add'] 35 >>> del name[3] 36 >>> name 37 ['zhangsan', 'wang', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add'] 38 >>> name.remove("wang") 39 >>> name 40 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add'] 41 >>> name.pop() 42 'add' 43 >>> name 44 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu'] 45 46 47 48 扩展 49 50 >>> name 51 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu'] 52 >>> age=[22,33,44] 53 >>> name.extend(age) #extemd用于扩展 54 >>> name 55 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu', 22, 33, 44] 56 57 58 59 拷贝 60 61 >>> name 62 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu', 22, 33, 44] 63 >>> 64 >>> name_copy = name.copy() #name.copy 浅拷贝 只能拷贝一层 65 >>> name_copy 66 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu', 22, 33, 44] 67 68 统计 69 70 >>> name 71 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu', 22, 33, 44] 72 >>> name.insert(2,"xiaoqi") #统计列表里面xiaoqi出现的次数 73 >>> name 74 ['zhangsan', 'inster', 'xiaoqi', 'zhaoliu', 'xiaoqi', 'xiaojiu', 22, 33, 44] 75 >>> name.count("xiaoqi") 76 2 77 78 排序和反转 79 80 >>> name = ['zhangsan','lisi','wangwu','1','2','3'] 81 >>> name.sort() 82 >>> name 83 ['1', '2', '3', 'lisi', 'wangwu', 'zhangsan'] 84 >>> 85 >>> name.reverse() 86 >>> name 87 ['zhangsan', 'wangwu', 'lisi', '3', '2', '1'] 88 89 90 91 获取下标 92 93 >>> name 94 ['zhangsan', 'wangwu', 'lisi', '3', '2', '1'] 95 96 >>> name.index('wangwu') 97 1
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
语法
name=('zhansan','lisi','wangwu')
它只有2个方法,一个是count,一个是index,
2,字符串操作
1 >>> my = "my love is eat" 2 >>> print(my.capitalize()) #首字母大写 3 My love is eat 4 5 >>> print(my.count("a")) #统计有几个a 6 1 7 8 >>> print(my.endswith("at")) #以什么结尾 9 True 10 11 12 ------------------my love is eat------------------ 13 14 15 16 >>> print(my.find("love")) #切片 17 3 18 19 20 21 my2 = "my name is {name} and i am {year} old " 22 >>> print(my2.format(name='hello',year=22)) #格式化 23 my name is nicai and i am 22 old 24 25 >>> print(my2.format_map( {'name':'hello','year':22 } )) 同上 大部分用上面那个 26 my name is hello and i am 22 old 27 28 —————————————————————————————————————— 29 30 >>> print('123asd'.isalnum()) #有阿里伯数字的显示True 31 True 32 33 >>> print('123asd'.isalpha()) #纯英文字符就显示True 否则 False 34 False 35 36 print('12'.isdigit()) #是否是为整数 37 True 38 39 >>> print('a1A'.isidentifier()) ##标识符 判断是不是一个合格的表示符 是不是一个合法的变量名 40 True 41 42 >>> print('33'.isnumeric()) #只有数字在里面的时候返回True 小数不行 43 True 44 45 >>> print(' '.isspace()) #是否是空格 46 True 47 48 >>> print('My Name Is'.istitle())#是否为title 首字母大写 49 True 50 51 >>> print('My Name Is'.isupper())#是否全是大写 52 False 53 54 —————————————————————————————————————————————— 55 56 57 58 >>> print(''.join(['1','2','3'])) 59 123 60 >>> print(','.join(['1','2','3'])) 61 1,2,3 62 63 >>> print('+'.join(['1','2','3'])) 64 1+2+3 65 66 67 68 —————————————————————————————————————————————— 69 70 >>> name = "my name is" 71 >>> print(name.ljust(50,'*')) 72 my name is**************************************** 73 >>> print(name.rjust(50,'-')) 74 ----------------------------------------my name is 75 76 77 78 ———————————————————————————————————————————— 79 80 >>> print('Name'.lower())#把大写变小写 81 name 82 >>> print('Name'.upper())#把小写变大写 83 NAME 84 85 >>> print(' love\n'.lstrip()) #从左边去除空格和者回车 86 love 87 88 >>> print(' love\n'.rstrip())#从右边去除空格和者回车 89 love 90 91 >>> print(' love\n'.strip()) #两边去除空格和回车 一般这个用的多 92 love 93 94 >>> print('love ll '.replace('l','L')) 把 l 全部替换 L 95 Love LL 96 >>> print('love ll '.replace('l','L',1)) 只替换一个 97 Love ll 98 99 >>> print('love me'.rfind('e')) #从左往右 找到最右边的下标 100 6 101 102 >>> print('love me'.rfind('me')) 103 5 104 105 >>> print('lo ve is '.split())#默认按照空格来分成一个列表 106 ['lo', 've', 'is'] 107 108 >>> print('lo ve is '.split('l')) 按照 l 分割 109 ['', 'o ve is '] 110 111 >>> print('1+2+3+4'.split('+')) 112 ['1', '2', '3', '4'] 113 >>> print('1+2+\n3+4'.splitlines()) 114 ['1+2+', '3+4'] 115 116 >>> print('Love Is'.swapcase()) 117 lOVE iS 118 119 >>> print('Love Is'.title()) 120 Love Is 121 122 >>> print('love'.zfill(10)) 123 000000love
- 字典操作
- 集合操作
- 文件操作
- 字符编码与转码
3. 字典操作
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
字段的特性
dict是无序的
key必须是唯一的,所以天生去重
语法
info = {
'stu01' : "zhang",
'stu02' : "wang",
'stu03' : "li",
}
print(info)
1 增加 2 >>> print(info) 3 {'stu03': 'li', 'stu01': 'zhang', 'stu02': 'wang'} 4 >>> info["stu04"] = "zhao" 5 >>> print(info) 6 {'stu03': 'li', 'stu01': 'zhang', 'stu02': 'wang', 'stu04': 'zhao'} 7 8 修改 9 >>> info["stu03"] = "liu" 10 >>> print(info) 11 {'stu03': 'liu', 'stu01': 'zhang', 'stu02': 'wang', 'stu04': 'zhao'} 12 13 查找 14 >>> "stu01" in info #标准用法 15 True 16 >>> info.get("stu02") #获取 17 'wang' 18 >>> info["stu03"] # 同上 但是 19 'liu' 20 >>> info["stu05"] 如果一个可以不存在,就会显示错误 21 Traceback (most recent call last): 22 File "<stdin>", line 1, in <module> 23 KeyError: 'stu05' 24 25 删除 26 >>> del info["stu01"] #删除 27 >>> info 28 {'stu03': 'liu', 'stu02': 'wang', 'stu04': 'zhao'} 29 30 >>> info.pop("stu03") #标准删除 31 'liu' 32 >>> info 33 {'stu02': 'wang', 'stu04': 'zhao'} 34 35 >>> info 36 {'stu03': 'li', 'stu01': 'zhang', 'stu02': 'wang'} 37 >>> info.popitem("stu03") #不能这样删除 38 39 Traceback (most recent call last): 40 File "<stdin>", line 1, in <module> 41 TypeError: popitem() takes no arguments (1 given) 42 43 >>> info.popitem() #是随机的不常用 44 ('stu03', 'li') 45 >>> info.popitem() 46 ('stu01', 'zhang') 47 >>> info 48 {'stu02': 'wang'} 49 50 51 多级字典嵌套及操作 52 info = { 53 '北京':{ 54 '昌平':'a123', 55 '三里屯':'b123', 56 '不知道了':'c123' 57 } , 58 '上海': { 59 "浦东":"d123", 60 "黄埔":"e123", 61 "没了":"f123" 62 }, 63 '河北':{ 64 65 '邯郸':'g123', 66 '石家庄':'h123' 67 } 68 } 69 70 >>> info 71 {'北京': {'三里屯': 'b123', '不知道了': 'c123', '昌平': 'a123'}, '河北': {'石家庄': 'h123', '邯郸': 'g123'}, '上海': {'浦 东': 'd123', '黄埔': 'e123', '没了': 'f123'}} 72 >>> info['河北']['邯郸'] 73 'g123' 74 75 values 76 >>> info 77 {'北京': '昌平', '河北': '石家庄', '上海': '浦东'} 78 >>> info.values() 79 dict_values(['昌平', '石家庄', '浦东']) 80 81 keys 82 >>> info.keys() 83 dict_keys(['北京', '河北', '上海']) 84 85 86 update 87 >>> info 88 {'北京': '昌平', '河北': '石家庄', '上海': '浦东'} 89 90 >>> b = {1:2,3:4,"hello":"world"} 91 >>> b 92 {1: 2, 3: 4, 'hello': 'world'} 93 >>> info.update(b) 94 >>> info 95 {1: 2, 3: 4, 'hello': 'world', '上海': '浦东', '北京': '昌平', '河北': '石家庄'} 96 97 98 item 99 >>> info.items() 100 dict_items([(1, 2), (3, 4), ('hello', 'world'), ('上海', '浦东'), ('北京', '昌平'), ('河北', '石家庄')]) 101 >>>
循环dic
方法一
info = {
'北京':"昌平",
'上海':"浦东",
'河北':"石家庄"
}
for key in info: #这个常用
print(key,info[key])
for k,v in info.items(): #把一个字典变成列表 循环的时候第一个是k,第二个是v 处理大数据时不用这个方法
print(k,v)
4.集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下
去重,把一个列表变成集合,就自动去重了
关系测试,测试两组数据之前的交集、差集、并集等关系
常用操作
>>> s = set([3,5,6,10])
>>> t = set("Hello")
>>> a = t|s
>>> print(a)
{'e', 3, 5, 6, 10, 'l', 'o', 'h'}
>>> b = t & s
>>> print (b)
set()
>>> c = t ^ s
>>> print (c)
{'e', 3, 5, 6, 10, 'l', 'o', 'h'}
>>> d = t - s
>>> print (d)
{'e', 'o', 'h', 'l'}
基本操作
1 >>> s = set([3,5,6,10]) 2 >>> t = set("Hello") 3 4 >>> t.add('x')# 添加一项 5 >>> print(t) 6 {'e', 'x', 'o', 'H', 'l'} 7 8 >>> s.update([10,37,42])#添加多项 9 >>> print(s) 10 {3, 37, 5, 6, 10, 42} 11 12 >>> t.remove('H') 13 >>> print(t) 14 {'e', 'x', 'o', 'l'} 15 16 len(s) 17 set 的长度 18 6 19 x in s 20 测试 x 是否是 s 的成员 21 22 x not in s 23 测试 x 是否不是 s 的成员 24 25 s.issubset(t) 26 s <= t 27 测试是否 s 中的每一个元素都在 t 中 28 29 s.issuperset(t) 30 s >= t 31 测试是否 t 中的每一个元素都在 s 中 32 33 s.union(t) 34 s | t 35 返回一个新的 set 包含 s 和 t 中的每一个元素 36 37 s.intersection(t) 38 s & t 39 返回一个新的 set 包含 s 和 t 中的公共元素 40 41 s.difference(t) 42 s - t 43 返回一个新的 set 包含 s 中有但是 t 中没有的元素 44 45 s.symmetric_difference(t) 46 s ^ t 47 返回一个新的 set 包含 s 和 t 中不重复的元素 48 49 s.copy() 50 返回 set “s”的一个浅复制
1.集合add的使用
s1 = {11,22,33,44,55,}
s1.add(123)
print(s1)
程序运行结果如下:
{33, 11, 44, 22, 55, 123}
2.集合difference的使用
s1 = {11,22,33,44,55,}
s2 = {11,22,33,44,}
s = s1.difference(s2)
print(s)
print(s1)
print(s2)
程序运行结果如下:
{55}
{33, 11, 44, 22, 55}
{33, 11, 44, 22}
从输出结果可以看出difference不会修改s1 s2集合本身
3.集合difference_update的使用
s1 = {11,22,33,44,55}
s2 = {11,22,33,44}
s3 = s1.difference_update(s2)
print(s3)
print(s1)
print(s2)
程序运行结果如下:
None
{55}
{33, 11, 44, 22}
从输出结果可以看出集合s1已经被修改
4.集合discard的使用
discard:删除集合中指定的元素
s1 = {11,22,33,44,55}
s1.discard(11)
print(s1)
程序运行结果如下:
{22,33,44,55}
第二种情况:移除集合中不存在的元素(即便元素不存在也不会报错)
s1 = {11,22,33,44,55,}
s1.discard(88)
print(s1)
程序运行结果如下:
{33, 11, 44, 22, 55}
5.集合clear的使用
clear:清空集合中所有的元素
s1 = {11,22,33,44,55,}
s1.clear()
print(s1)
程序运行结果如下:
set()
6.集合pop的使用
s1 = {11,22,33,44,55,}
s1.pop()
print(s1)
程序运行结果如下:
{11, 44, 22, 55}
7.集合remove的使用
s1 = {11,22,33,44,55,}
s1.remove(44)
print(s1)
程序运行结果如下:
{33, 11, 22, 55}
如果元素不在集合中,则会报错
s1 = {11,22,33,44,55,}
s1.remove(66)
print(s1)
报错信息如下
Traceback (most recent call last):
File "D:/PythonS13/day3/test.py", line 34, in <module>
s1.remove(66)
KeyError: 66
8.集合intersection的使用
s1 = {11,22,33,44,55}
s2 = {11,22,33,44}
s3 = s1.intersection(s2)
print(s3)
程序运行结果如下:
{33, 11, 44, 22}
9.集合intersection_update的使用
s1 = {11,22,33,44,55}
s2 = {11,22,33,44}
s1.intersection_update(s2)
print(s1)
10.集合isdisjoint的使用
s1 = {11,22,33,44,55}
s2 = {11,22,33,44}
s3 = {66,77,88}
s4 = s1.isdisjoint(s2)
s5 = s1.isdisjoint(s3)
print(s4)
print(s5)
程序运行结果如下:
False
True
11.集合issubset和issuperset的使用
s1 = {11,22,33,44,55}
s2 = {11,22,33,44}
s3 = {66,77,88}
s4 = s2.issubset(s1)
s5 = s1.issuperset(s2)
print(s4)
print(s5)
程序运行结果如下:
True
True
3 文件操作
对文件操作流程
打开文件,得到文件句柄并赋值给一个变量
通过句柄对文件进行操作
关闭文件
1 #f = open('file',encoding="utf-8").read()#打开一个文件 不符合正常的编写规范 2 3 f = open('file',encoding="utf-8")#会付给f一个内存对象 也可以叫做文件句柄 4 5 #句柄包含文件的文件名,字符集,大小,内存,还有硬盘上的起始位置 就可以读写了 6 7 data = f.read() 8 9 #在打印第一遍时 从头打印到尾,当在打印第二遍的时候 就直接从尾部开始打印了 所以打引不出来东西 10 11 data2 = f.read() 12 13 print('data') 14 15 print('---------data2-------------',data2)
1 f = open('file','w',encoding="utf-8") #默认创建一个新文件 2 f.write("my heart go on,\n") #这样就能写了 3 f.write(" go on") 4 #但是 写的模式打开就不能读了 但是如果又想读又想写 可以用a=append 追加 5 f = open('file','a',encoding="utf-8") #默认创建一个新文件 6 f.write("my heart go on,\n") 7 f.write(" go on") 8 # 这样可以一行一行的读 #如果要是打印多行的话 这种方法就显得微不足道了 9 f = open('file','r',encoding="utf-8") 10 print(f.readline())#f.readline的意思是一行 11 如果要是打印多行的话 12 13 所以可以这样 14 f = open('file','r',encoding="utf-8") 15 for in in range(5): 16 print(f.readline())
1 除了上面那个还有一个优化的那就是用f.readlines 它的作用就是把文件里面的内容变成列表 ,每一行就是一个元素 2 格式如下 3 ['************\n','*********\n' 4 这样就可以使用下面的循环了 5 f = open('file','r',encoding="utf-8") 6 print(f.readline())#f.readline的意思是一行 7 for index,line in enumerate(f.readlines()): 8 if index == 9: 9 print('-----这是第十行-------') 10 continue 11 print(line.strip()) 12 #readlines只能使用一小文件 因为他要把文件的所有行读到内存里 显然是处理不了的
为了解决这些问题 可以采用 让他读一行执行一行,读一行执行一行 例子 f = open('file','r',encoding="utf-8") count =0 for line in f: if count == 9: print('--------第十行----------') count += 1 continue print(line) count +=1
打开文件的模式有:
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

浙公网安备 33010602011771号