字符串
name ='sunhao sunholy'
字符串的索引
从第一个字符开始从0开始算索引号
print(name[0])
输出结果是s
print(name[-1])
输出结果是y
print(name[0:6]
输出结果是‘sunhao’(顾头不顾尾,包含index=0的字符,不包含index=6的字符)
字符串的切片
#逐一打印name中的字符
for i in name:
print(i)
字符串的常用方法
name ='sunhao sunholy'
print(name.capitalize()) # 首字母大写 输出'Sunhao sunholy'
print(name.upper()) #转换为大写
print(name.lower()) #转换成小写
print(name.count(‘s’)) # 字符串中字符的数量,输出 2
print(name.casefold()) # 不重要
print(name.center(50,"-")) # 居中打印50个字符,不够的用-补上
print(name.encode()) # 将字符串转换成二进制
print(name.startswith("www")) #检测是不是以“www”开头
print(name.endswith(".com")) # 检测是不是以“.com”结尾
print(name.expandtabs(tabsize=30)) # 文字中的TAB键转换成30个空格
print(name.find("y")) #查询所在位置 13
-------------------------------------------------------------------------------------------------
name = 'my name is {name},i am {year} '
print(name.format(name = 'alex',year=23)) #my name is alex ,i am 23
print(name.format_map({'name':'alex','year':12})) #my name is alex ,i am 23
-------------------------------------------------------------------------------------------------
print(name.index())
print(name.isalnum()) # 判断是否阿拉伯数字或字母(包含所有的英文字符)
print(name.isalpha()) # 判断是否英文字符(包含英文大写)
print(name.isdecimal()) # 判断是否十进制(用处不大)
print(name.isdigit()) # 判断是否是整数
print(name.isidentifier()) # 标识符-判断是不是一个合法的标识符(变量名)
print(name.isnumeric()) # 是否纯数字
print(name.isspace()) # 是不是空格
print(name.istitle()) # 是不是标题
print(name.isprintable()) # 是否可打印(ppy文件)
print(name.isupper()) # 是不是大写
print(name.join("==")) # =sunhao sunholy=
列表
列表
names = ["Sunhao","Chenhui","Fanchuanyun","Zhangluoyin"]
列表查找:
names[0] = "Sunhao"
names[1:3] = ["Chenhui","Fanchuanyun"] #顾头不顾尾(1-3包括1不包括3)
names[:3] =["Sunhao","Chenhui","Fanchuanyun"] #取前三个
names[-1] = "Zhangluoyin" #取最后一个值
names[-2] = "Fanchuanyun" #取从后数第几个值
names[-3:-1] = ["Chenhui","Fanchuanyun"] #顾头不顾尾,因此不包含“Zhangluoyin”
names[-3:] =["Chenhui","Fanchuanyun","Zhangluoyin"] #取倒数三个值
列表增加元素:
names.append("Liubo") #添加一个元素到最后
names.insert(1,"Liubo") #添加到下标为1的元素前面
names.insert(3,"Liubo") #添加到下标为2的元素后面
列表更改元素:
names[2] = "Lihao" #修改元素
列表删除元素:
names.remove("Fanchuanyun") #删除“Fanchuanyun”
names.remove(2) #删除下标为2的元素
names.pop(9) #删除最后一个元素(默认删除最后一个),输入下标和remove效果一样
names.clear() #清空列表
del names[0] #按照索引号删除,也可以按照切片长度删除 eg: del names[0:2]
print(names)
列表元素下标
names.index("Sunhao") = 0
names[names.index("Sunhao") ] = "Sunhao"
统计人名个数
names = ["Sunhao","Chenhui","Fanchuanyun","Zhangluoyin","Sunhao"]
names.count("Sunhao") = 2
列表其他
names.reverse() #反转列表
names.sort() #排序 特殊字符<数字<大写字母<小写字母
names.extend(names2) #将names2与name合并,且names2存在
del names2 #删除列表
复制(深浅copy)
cpoy()
names = ["Sunhao","Chenhui",["Fanchuanyun","Zhangluoyin"]]
names2 = names.copy()
names2 = names #浅copy,names改变则names2也改变,指向同一个内存地址(id方法即可判断是否是同一个内存地址,print(id(names2))
names2 = names.copy #深copy,names改变names2不变,指向两个不同的内存地址,但是没有改变的数据的内存地址和原来一样,只是改变了的数据不一样了。
------------------------------------------------------------------------------------------------------------------------
下面斜体的内容仅记录,因为经笔者验证,并不是这样的。。但是之前老师是这样讲的。。。所以斜体的这部分,是错的,先不管。
#names2 = ["Sunhao","Chenhui",["Fanchuanyun","Zhangluoyin"]]只复制第一层的地址,是浅copy(copy出来的表仍然与原表相关),第二层列表names更改了,names2也会更改。
import copy
names2 = copy.copy(names) #浅copy
names2 = copy.deepcopy(names) #深copy
---------------------------------------------------------------------------------------------------------------------------------------------
range
能生成特殊的列表
a = range(5)
表示从0开始,数5个数,即列表中有0,1,2,3,4
元组(了解就OK)
特殊的列表,不能修改元组的内容。
字典
字典:key-value
info = {
'2008103215' : ["sunhao","23"],
'2008103242' : "chenhui",
'2008103241' : "chengmou",
}
字典是无序的,key必须是唯一的。
-----------------------------------------------------------------------------------
查找:
print(info["2008103215") #["sunhao","23"]当2008103215不存在的时候报错
print(info.get("2008103215")) #如果没有值就显示None
-----------------------------------------------------------------------------------
增加:
info['2008103232'] = "zhangluoyin"
-----------------------------------------------------------------------------------
修改:
info["2008103215"] = "孙皓"
-----------------------------------------------------------------------------------
删除:
del info #删除整个字典
del info["2008103215"] #删除key为2008103215的记录
info.pop("2008103215") #删除key为2008103215的记录
info.popitem() #随机删除一条记录
-----------------------------------------------------------------------------------
判断一个key是否存在
print('2008103215' in info ) #True Python2里:info.has_key("2008103215")
多级字典嵌套及操作
info["2008103215"][1] = 23 # 嵌套修改值
-----------------------------------------------------------------------------------
info.value() #打印所有的值
info.key() #打印所有的键
info.setdefault("2008103230",“范川云”) #如果key存在则返回,如果不存在则录入“范川云”
-----------------------------------------------------------------------------------
b = {"2008103215":"雷延庆"
1:2
2:3
}
info.update(b) ={
'2008103215' : “雷延庆”,
'2008103242' : "chenhui",
'2008103241' : "chengmou",
1:2
2:3
}
-------------------------------------------------------------------------------
info.item()#将字典转换为列表
c = info.fromkeys([1,2,3],“test”) #初始化一个新的字典
-------------------------------------------------------------------------------
字典的循环
方法一:for key in info:
print(key,info[key])
方法二:for k,v in info.item(): #会先把字典转换成列表,数据量大时耗时
print(k,v)
集合
集合的两个作用:
1.去重:
list_1 = [1,2,3,4,5,4,3,6,7,9]
list_1 = set(list_1)
print(list_1) = [1,2,3,4,5,6,7,9]
2.关系测试:
list_1 = set([1,2,3,4,5,6,7,9])
list_2 = set([2,3,5,6,7])
交集:
list_1.intersection(list_2) #简写:list_1 & list_2
并集:
list_1.union(list_2) #简写:list_1 | list_2
差集:(我有你没有的)
list_1.difference(list_2) #list_1里有的,list_2里没有的取出来 #简写:list_1-list_2
list_2.difference(list_1) #list_2里有的,list_1里没有的取出来 #简写:list_2-list_1
对称差集:(两个集合互相没有的取出来求和)
print(list_1.symmetric_difference(list_2)) #简写:list_1 ^ list_2
子集:(判断是否子集)
print(list_1.issubset(list_2) ) #False
父集:(判断是否父集)
print(list_1.isupset(list_2) ) #True
判断是否有交集()
print(list_1.isdisjoint(list_2) ) #False(有交集输出False,没交集输出True)
集合的操作(增删改查):
添加:
list_1.add(999) #单个添加
list_1.update([1,2,3,41,432,234,]) #批量操作
删除一项
list_1.remove(1) # 不存在就报错(不建议使用)
list_1.pop() #任意删除一个,并返回删除的数
list_1.discard() #不存在也不会报错(建议使用)
长度:
len(list_1)
判断某元素是不是list_1的成员:
‘a’ in list_1 'a' not in list_1