python学习笔记4-python字符串、列表、元组、字典、文件、集合
本文学习笔记主要有
字符串的操作、列表的操作、元组的操作、字典的操作、文件的操作
一、字符串
python中字符串是常用的数据类型,我么可以使用引号(''或者"")来创建字符串。
特性:字符串是不可变的,不能被修改;但是可被循环,下面看一下字符串一些使用方法。
name = "XiaoLing" #定义一个带有引号的变量,引号中的内容既是变量 print(name[0])#取出字符串的中的内容,依据字符串下标取出 print(name[0:3])#切片---切片时“顾头不顾尾” print(len(name))#判断字符串的长度 print(name.capitalize())#首字母大写 print(name.casefold())#将所有大写字母变成小写 print(name.lower())# print(name.upper())#将小写变为大写 print(name.center(50,'-'))#返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 print(name.count('i'))#统计字符串中“i”出现的次数 print(name.encode())#将字符串变为bytes格式 print(name.startswith('xi'))#判断字符串是否以“xi”开头 print(name.endswith('ng'))#判断字符串是否以“ng”结束 print(name.find('o'))#查找字符串中是否存在‘o’,如果存在返回其索引,如果不存在返回-1 print(name.isdigit())#判断是否是整数 print(name.index('a'))#返回字符串a的索引 print(name.split('i'))#以“i”为条件,拆分字符串 print(name.strip())#去除空格(字符串的前后空格;name = " my test ",m前、t后的空格会被去除) print(name.lstrip())#单独去掉左边的空格 print(name.rstrip())#去掉字符串最后面的空格 print(name.replace('a','b'))#替换 a = "-" print(a.join(name))#链接字符串 #------------------format--------------------- msg = "my name is {},and age is {}" print(msg.format("xiaoling",22)) #打印结果:my name is xiaoling,and age is 22 msg1 = "my name is {1},and age is {0}" print(msg1.format("xiaoling",22)) #打印结果:my name is 22,and age is xiaoling msg2 = "my name is {names},and age is {age}" print(msg2.format(age=22,names="xiaoling")) #打印结果my name is xiaoling,and age is 22 #-----------------format_map---------------------- msg3 = "my name is {name},and age is {age}" print(msg3.format_map({'name':'xiaoling','age':22})) #--字符串循环-- for var in name: print(var)
字符串的拼接:
python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
所以尽量不使用字符串拼接,使用格式化输出:
name = "xiaoling" print("my name is %s"%name) #打印结果:ms name is xiaoling PS:字符串是 %s;整数 %d;浮点数%f
二、列表的操作
序列是Python中最基本的数据结构,序列中每个元素都有分配一个数字,它的位置或索引,第一个索引是0,第二个索引是1,依此类推。
Python中有6个序列的内置类型,但是最常见的是列表和元组。
序列都可以进行的操作包括索引,切片、加、检查成员等操作。
列表:最常用的Python数据类型,它可以作为方括号内的逗号分隔值出现;列表中的数据项不需要具有相同的类型。
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可:
list1 = ["xiaoling","jack",1999,100] list2 = [1,2,3,11,22,33,11] list3 = ["a","b","c","d","e","f"]
创建列表之后,可以对列表进行增、删、改、查等操作:
获取列表元素:
list = ["xiaoling","jack","rose",26,1001,"eric"] print(len(list))#获取列表长度, # 打印结果为:5 print(list[2])#通过下标获取列表中的元素,下标计数从0开始, # 打印结果为rose print(list[1:4])#切片,取下标1至4的元素,“顾头不顾尾,包括1,不包括4”; # 打印结果为['jack', 'rose', 26] print(list[1:-1])#取下标1至-1的值,不包括-1 # 打印结果为['jack', 'rose', 26, 1001] print(list[0:3])#从头开始取 # 打印结果为['xiaoling', 'jack', 'rose'] print(list[:3])#从头开始取,0可以忽略 # 打印结果为['xiaoling', 'jack', 'rose'] print(list[3:])#如果想取最后一个元素,必须不能写-1,只能这么写 # 打印结果为[26, 1001, 'eric'] print(list[0::2])#后面的2是代表每隔一个元素,就取一个 # 打印结果为['xiaoling', 'rose', 1001] print(list[::2])#后面的2是代表每隔一个元素,0可以省略 # 打印结果为['xiaoling', 'rose', 1001]
追加列表元素:
list = ["xiaoling","jack","rose",26,1001,"eric"] list.append("追加内容") print(list)#使用append追加时,追加的元素永远在列表最后面 #打印结果为["xiaoling","jack","rose",26,1001,"eric"]
插入列表元素:
list = ["xiaoling","jack","rose",26,1001,"eric"] list.insert(2,"在2的位置插入")#在原来下标为2的位置添加该元素,原来下标为2的元素后移 print(list) #打印结果:['xiaoling', 'jack', '在2的位置插入', 'rose', 26, 1001, 'eric']
修改列表元素:
list = ["xiaoling","jack","rose",26,1001,"eric"] list[1] = "修改内容" #将下标为1的元素进行修改 print(list) #打印结果:['xiaoling', '修改内容', 'rose', 26, 1001, 'eric']
删除列表元素:
list = ["xiaoling","jack","rose",26,1001,"eric"] del list[3]#删除下标3对应的元素 print(list) #打印结果:['xiaoling', 'jack', 'rose', 1001, 'eric'] list.remove("rose")#删除指定元素 print(list) #打印结果:['xiaoling', 'jack', 26, 1001, 'eric'] list.pop()#删除列表最后一个值 print(list) #打印结果:['xiaoling', 'jack', 'rose', 26, 1001]
扩展列表元素:
list = ["xiaoling","jack","rose",26,1001,"eric"] b = [1,2,3] list.extend(b)#将扩展的内容增加至旧列表后面 print(list) #打印结果:['xiaoling', 'jack', 'rose', 26, 1001, 'eric', 1, 2, 3]
统计列表元素:
list = ["xiaoling","jack","rose",26,1001,"eric","jack"] print(list.count("jack"))
排序&翻转:
list = ["xiaoling","jack","rose",26,1001,"eric","jack"] print(list.sort())#按照ASCII码排序,默认从小到大排序;python3中数字与字符串不能一起排序。 list.reverse()#翻转字符串 print(list)
元素下标获取:
list = ["xiaoling","jack","rose",26,1001,"eric","jack"] print(list.index("jack"))
拷贝:
list = ["xiaoling","jack","rose",26,1001,"eric","jack"] list_copy = list.copy() print(list_copy) #打印结果:['xiaoling', 'jack', 'rose', 26, 1001, 'eric', 'jack']
三、元组的操作
元祖跟列表类似,不同之处在于元祖的元素不能修改。
元祖使用小括号
元祖的创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
tup = ("xiaoling","jack","rose",26,1212)#创建元祖 #元祖只有两个方法 print(tup.count("jack"))#count,统计列表中的元素个数 print(tup.index("jack"))#index,获取元素的下标
四、字典操作
字典,一种可变容器模型,且可存储任意类型对象。
字典是由key-value的方式存储数据,key与value之间使用冒号(:)分割,每个对号之间使用逗号(,)分隔,整个字典包括在花括号内({})。
字典是无序的,并且key是唯一的
字典的效率快,通过hash实现。
创建字典:
dict = { "1101":"xiaoling", "1102":"jack", "1103":"eric", "1104":125, }
增加字典元素:
dict = { "1101":"xiaoling", "1102":"jack", "1103":"eric", "1104":125, } dict["1105"] = "新增"
print(dict) #打印结果:{'1101': 'xiaoling', '1104': 125, '1102': 'jack', '1105': '新增', '1103': 'eric'}
修改字典元素:
dict = { "1101":"xiaoling", "1102":"jack", "1103":"eric", "1104":125, } dict["1104"] = "修改内容" print(dict) #{'1101': 'xiaoling', '1102': 'jack', '1103': 'eric', '1104': '修改内容'}
删除字典元素:
dict = { "1101":"xiaoling", "1102":"jack", "1103":"eric", "1104":125, } dict.pop("1101")#标准删除姿势,删除key及其对应的值 print(dict) #打印结果:{'1103': 'eric', '1104': 125, '1102': 'jack'} del dict['1102'] print(dict) #打印结果:{'1101': 'xiaoling', '1104': 125, '1103': 'eric'} print(dict.popitem())#随机删除
查询字典元素:
dict = { "1101":"xiaoling", "1102":"jack", "1103":"eric", "1104":125, } print(dict.get("1106","随便返回"))#查找字典内的元素,如果不存在的话可以返回任意值 #打印结果:随便返回
循环字典:
for key in names:#效率高 print(key,names[key]) for k,v in names.items():#效率低 print(k,v)
五、文件操作
1、打开文件,得到文件句柄并赋值给一个变量。
2、通过句柄对文件进行操作
3、关闭文件
f = open('test.txt')#打开文件,引号中也可以填写文件路径 frist_line = f.readline('test.txt')#读文件的一行 print('分割线',center(50,'-')) data = f.read()#读取剩下的所有文件,文件太大时不要打开 f.close()#关闭文件
文件的打开模式一:
文件的打开模式有以下三种:
mode = r read:读模式
mode = w write:写模式
mode = a append:追加模式;追加至文件最后
备注:写模式打开不能读,读模式打开不能写;
已写模式打开的文件,是新建;如有旧文件就会被覆盖;
打开文件是全部读取到内存里了,文件内容是连续的。
文件读写的两种方式:
第一种:将文件全部读出,修改内容后重新写入(弊端,太消耗内存) f = open("test.txt",mode="r",encoding="utf-8")#已读的方式打开文件 data = f.read()#读取所有内容 data_new = data.replace("测试","哈哈")#将"测试"修改为"哈哈" f.close()#关闭文件 f = open("test.txt",mode="w",encoding="utf-8")#重新已写方式打开 f.write(data_new)#将修改后的文件内容重新写入文件 f.close()#关闭文件 第二种:单独读取某行(边读边写,省内存,但是占硬盘的空间) import os#导入os模块 f = open("test.txt",mode="r",encoding="utf-8")#打开旧文件 f_new = open("test_new",mode="w",encoding="utf-8")#新创建一个文件 for line in f:#循环一行一行的读取, if "haha" in line:#判断修改内容是否存在 line = line.replace("测试","哈哈")#如果存在就进行修改 f_new.write(line)#然后写入新文件 f.close()#关闭旧文件 f_new.close()#关闭新文件 os.remove("lyirc")#删掉旧文件 os.remove("test_new","test")#将新文件重命名
文件打开模式二:
r+ 追加+读,可以定长修改;a就是只能追加
w+ 写读模式清空源文件内容,写入新内容;先读的话内容会写到后面,未读的话内容写到前面
a+ 同a
rb 以二级制模式打开文件,不能声明encoding
wb 以二进制写入文件,必须是bytes格式
f.tell()#打印光标位置,代表读多少字节
f.seek()#代表移动多少个字符
六、集合
集合是一个无序的,不重复的数据组合并可以进行关系运算
集合语法: name = {1,2,3,4,5,3} #打印结果:{1,2,3,4,5} 集合的关系运算 a={1,3,5,7,10} b={2,3,4,5,6,8} print(a & b)# 交集 print(b - a)# 差集 print(a - b)# 差集 print(a | b)# 并集 print(a ^ b)# 对称差集,只有自己集合里有的;近视并集-减交集
                    
                
                
            
        
浙公网安备 33010602011771号