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)
View Code

 

  字符串的拼接:

  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]
View Code

  追加列表元素:

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)# 对称差集,只有自己集合里有的;近视并集-减交集

 

 

 

 

 

 

 

 

 

 

  

  

   

 

 

 

 

 

 

 

 

 

 

 

  

 

posted on 2017-05-22 16:53  小零-xiao0  阅读(198)  评论(0)    收藏  举报