Python之路-python数据类型(列表、字典、字符串、元祖)操作
一、列表:
列表的语法,以中括号开通和结尾,元素以逗号隔开。例如:name = []
列表是以下标取值,第一个元素下标是0,第二个元素下标是1,最后一个元素下标是-1.
1、增加
#name = ["zhangsan","lisi","wanger","liwu"]
#name[1] = "wang"#在列表name的下标为1的位置增加一个元素"wang",当然这个下标原来的元素也就没有了,也同样是修改
#print(name)
#['zhangsan', 'wang', 'wanger', 'liwu']
插入法,name.insert(下标,要插入的元素名称)
#name.insert(0,"li")
#name.append("haha")#增加到最后一个
2、删除
#del name[1]#删(del并不是列表的专属,它可以也可以删除别的,例如直接删除变量)
#name.pop(0)#默认删除最后一个,可以加上列表下标
#name.remove("zhangsan")
3、修改
#name = ["zhangsan","lisi","wanger","liwu"]
#name[1] = "wang"#
#['zhangsan', 'wang', 'wanger', 'liwu']
4、统计(count)
#name = ["zhangsan","lisi","wanger","liwu"]
#print(name.count("zhangsan"))
#1 #这里的1是代表zhangsan这个元素只有一个
5、索引(获取元素的下标)(index)
#name = ["zhangsan","lisi","wanger","liwu"]
#print(name.index("lisi"))
#1 #这里的1则表示lisi这个元素在列表中的下标是1
6、排序(sort)
#name = ["zhangsan","lisi","wanger","liwu","123","456"]
#print(name.sort())
#TypeError: unorderable types: int() < str()#python3里面不同类型的数据不能排序,python2.x里面可以排序,按照ASCII码排序。
7、翻转(reverse)
# name = ["zhangsan","lisi","wanger","liwu","3","2","1"]
# name.reverse()
# print(name)
#['1', '2', '3', 'liwu', 'wanger', 'lisi', 'zhangsan']
8、扩展(extend)name = ["zhangsan","lisi","wanger","liwu","3","2","1"]
name_2 = ["zhang","wang","li"]
name.extend(name_2)
print(name)
9、拷贝(浅copy和深copy)
浅copy
# name = ["zhangsan","lisi","wanger","liwu",["beidu","wangyi","sogou"]]
# name_2 = name.copy()
# print(name)
# print(name_2)
# name[0] = "wangmazi"
# name[4][0] = "beijing"
# print(name)
# print(name_2)
结果:
我们先打印name和name_2,发现已经copy完了,两个数据一模一样
['zhangsan', 'lisi', 'wanger', 'liwu', ['beidu', 'wangyi', 'sogou']]
['zhangsan', 'lisi', 'wanger', 'liwu', ['beidu', 'wangyi', 'sogou']]
然后我们在name里面修改zhangsan为wangmazi,发现name_2并没有跟着name变化,说明name_2已经独立为一个新的列表(列表的第一层数据已经完全被复制)。
但是,我们接着在name里面的的第二层列表修改baidu为beijing,发现name和name_2一模一样,这说明,列表只copy第一层数据,第二层开始就是共享一个数据(只复制 第一层)
['wangmazi', 'lisi', 'wanger', 'liwu', ['beijing', 'wangyi', 'sogou']]
['zhangsan', 'lisi', 'wanger', 'liwu', ['beijing', 'wangyi', 'sogou']]
深copy
# import copy(我们这里引用了copy这个模块,这里面的copy.copy跟列表中的copy一模一样)
#
# name = ["zhangsan","lisi","wanger","liwu",["beidu","wangyi","sogou"]]
# name_2 = copy.deepcopy(name) #注意这里,deepcopy意为深copy,
# print(name)
# print(name_2)
# name[0] = "wangmazi"
# name[4][0] = "beijing"
# print(name)
# print(name_2)
不废话,看结果
['zhangsan', 'lisi', 'wanger', 'liwu', ['beidu', 'wangyi', 'sogou']]
['zhangsan', 'lisi', 'wanger', 'liwu', ['beidu', 'wangyi', 'sogou']]
['wangmazi', 'lisi', 'wanger', 'liwu', ['beijing', 'wangyi', 'sogou']]
['zhangsan', 'lisi', 'wanger', 'liwu', ['beidu', 'wangyi', 'sogou']]
上面所示标红的字体看出,深copy会将更深层次的数据完完全全的copy一份。
二、字符串操作:
1、驼峰字体
#a = ("python oldboy edu")
#print(a.replace("p","ooo"))#更改
#print(a.title())#更改成驼峰字体
#oooython oldboy edu
#Python Oldboy Edu(每个单词的首字母将变成大写)
2、判断能否成为数字
#test = "110"
#print(test.isdigit())#值110能成为数字返回True
#test_2 = "baidu"
#print(test_2.isdigit())#但是baidu不会成为数字返回False
#True
#False
3、判断是否符合变量名命名规则
#test = "Name-1"
#print(test.isidentifier())#因为横杆在python中的意思为减号,所以不能是变量名的一部分
#test_2 = "Name_1"
#print(test_2.isidentifier())
>>>False
>>>True
4、左右补齐 #print("我爱你中国".center(50,"*"))
>>>**********************我爱你中国***********************
三、字典
字典的简单用法
name = {} #以两个大括号开始结尾
字典的特性:
1、key永远唯一
2、没有顺序
1、增加
info = {
'stu1101': "baidu",
'stu1102': "tengxun",
'stu1103': "alibaba",
}
#print(info)#修改\增加。
#info["stu1101"] = "哈哈" #字典里有key是stu1101的话就是修改,如果没有此key的话,就会新增。
#print(info)
>>>{'stu1102': 'tengxun', 'stu1101': 'baidu', 'stu1103': 'alibaba'}
>>>{'stu1102': 'tengxun', 'stu1101': '哈哈', 'stu1103': 'alibaba'}
2、删除
#删除
#del info["stu1101"]
#删除
#info.pop("stu1101")
#随机删除
#info.popitem()
3、查找
#print("stu1101" in info)#标准用法
#print(info.get("stu1101"))#获取
#print(info["stu1101"])#获取,但是key不存在就报错,但是get不会,.get不存在的话就返回None
通过key和values查找
#print(info.keys())#只打印key键,取出的值变成了list
#print(info.values())#z只打印valeus值,取出的值变成了list
>>>dict_keys(['stu1102', 'stu1101', 'stu1103'])
>>>dict_values(['tengxun', 'baidu', 'alibaba'])
4、转换
#print(info.items())
>>>{'stu1101': 'baidu', 'stu1102': 'tengxun', 'stu1103': 'alibaba'} #原数据
>>>dict_items([('stu1101', 'baidu'), ('stu1102', 'tengxun'), ('stu1103', 'alibaba')])#转换后的数据类型
5、字典的循环
#dict循环
#方法1
# for key in info:
# print(key,info[key])
#方法2
# for k,v in info.items(): #会先把dict转成list,数据里大时建议不要使用
# print(k,v)
6、字典的多级嵌套
# info = {
# "北京":{
# "海淀":["中关村","五道口"]
# },
# "上海":{
# "哈哈":["呵","呵呵"]
# },
# }
# print(info)
# info["上海"]["哈哈"][0] = "屌丝" #这里注意,字典和列表都可以用中括号[]取值,但是列表的话一般是用下标,这里指出的是直接写元素名称
# print(info)
>>>{'上海': {'哈哈': ['呵', '呵呵']}, '北京': {'海淀': ['中关村', '五道口']}}
>>>{'上海': {'哈哈': ['屌丝', '呵呵']}, '北京': {'海淀': ['中关村', '五道口']}}
Day1补充:
1、pyc是什么鬼
首先,我们知道计算机是无法直接识别高级语言。运行一个程序是,有个"解释器",将语言解释成计算机能识别的语言,语言分为编译型和解释型。
编译型:
例如C语言,运行之前需要先编译——解释成计算机能识别的语言(解释一次就OK了)
解释型:
例如Ruby,每次运行都需要python解释器将程序解释成机器能识别的语言。往下看,那么问题来了(确认每次都解释一遍吗?)
每次运行一个python程序后python解释器都需要程序解释成计算机能明白的语言,这个时候程序对应目录就会生成一个.pyc的文件。为什么呢?接着说,这个pyc是干嘛的呢,其实
一个python程序解释完以后都会生成一个.pyc的文件,下次再运行这个程序就不需要再解释一遍,这样大大提高了速度,但是如果源代码发生的变化怎么办呢,每次运行python程序
都会自动寻找一遍有没有对应的解释完成的pyc文件,如果有判断pyc是不是最新的,如果不是最新的就再解释一遍,如果是最新的就直接运行。
这样看来你还好意思说python是一个解释型语言吗?