常见的基本数据类型:
1. int 整数
2. bool 布尔. 判断. if while
3. str 字符串, 一般放小量的数据.
4. list 列表. 可以存放大量的数据
5. dict 字典, 以key:value的形式存储数据
6. set 集合(数学)
7. tuple 元组 不可变
- int
整数:可以 +、-、*、/、//、%、**运算
bit_length() 一个数的二进制长度
- bool
类型转换
字符串转换成整数 int(str)
整数转换换字符串 str(int)
结论: 想转化成xxx数据类型 xxx(目标)
结论2: True => 1 False => 0
结论3 , 可以当做False来用的数据: 0, "", [], (),{}, None 所有的空都是False
所有的空的东西都是False
- 字符串 字符:单一的文字符
字符串:有序的字符序列
字符串由' " ''' """ 括起来的内容叫字符串
索引
一排数字,反应第某个位置的字符 ,索引的下标从0开始,使用[]来获取数据
切片:[start:end:step] 顾头不顾腚 最后一个取不到
开始:结尾:步长
s = '刘德华很帅但是张国荣更' print(s[2]) print(s[11]) print(s[-1]) # 倒数第一 print(s[-4]+s[-3]+s[-2])
切片:[start:end:step] 顾头不顾腚 最后一个取不到
开始:结尾:步长 step:步长.如果是+从左往右. 如果是-从右往左 每n个取1个
1 s = '刘德华很帅但是张国荣更' 2 #切片 s[start: end] 顾头不顾尾 3 print(s[7:10]) 4 print(s[0:3]) 5 print(s[-4:-1]) 6 print(s[-1:-4]) # 默认的方向是从左往右切. 7 #从德开始切. 切到结尾 8 print(s[1:]) # 末尾 9 print(s[:4]) # 开头 10 print(s[:]) 11 12 13 s = "我要开始玩幺蛾子了你们怕不怕我很怕" 14 print(s[1:5]) 15 print(s[5:1:-1]) 16 #第三个参数是步长 17 print(s[1:5:3]) 18 print(s[4:8:2]) 19 20 s = "0123456789" 21 print(s[::2]) # 02468 22 print(s[-1:-6:-2]) 23 print(s[::-3]) 24 print(s[::-1])
常用操作方法:
1. upper() 转化成大写. 忽略大小写的时候 lower小写
2. strip() 去掉左右两端空白 用户输入的内容都要去空白
3. replace(old, new) 字符串替换
4. split() 切割 结果是list
5. startswith() 判断是否以xxx开头 endseith 结尾
6. find() 查找
7. isdigit() 判断是否是数字组成
8. len() 求长度. 内置函数
1.大小写转来转去
1 s = "abcd is not a good man! Mn is a good man" 2 s1 = s.capitalize() # 首字母大写 3 print(s1) 4 s2 = s.lower() 5 s3 = s1.upper() # 转化成大写字母. 要求记住. 使用场景: 忽略大小写的时候需要 6 print(s2) 7 print(s3) 8 9 10 s = "abcd is not a good man! Mn is a good man" 11 s1 = s.swapcase() # 大小写互换 12 print(s1) 13 14 s2 = "БBß" # 俄美德 15 print(s2) 16 print(s2.lower()) 17 print(s2.casefold()) # 都转化成小写. 支持的文字比lower多 18 19 20 s = "class app_le banana ora1nge pear " 21 s1 = s.title() # 标题.把单词的首字母大写 22 print(s1)
2.切来切去
1 s = "天然" 2 s1 = s.center(4,"*") # 把字符串拉长成4个单位 用*扩充 3 print(s1) 4 5 s = " 你好啊. 我叫赛利亚 " 6 print(s) 7 s1 = s.strip() # 去掉空白 8 print(s1) 9 10 11 12 #模拟登陆 13 #用户输入的内容是无法保证合法的. 需要进行处理和判断 14 username = input("请输入用户名:").strip() 15 password = input("请输入密码:").strip() 16 if username == "alex" and password == "123": 17 print("成功") 18 else: 19 print("失败") 20 21 22 s = "你好啊跟你好" 23 print(s.strip("好")) 24 25 26 27 s = "abs_wasd_rty_thon_evaj_eggon" 28 # s1 = s.replace("rty", "try") 29 s1 = s.replace("i", "SB", 2) 30 print(s1) 31 32 s = "abs_wasd_rty_thon_evaj_eggon" 33 lst = s.split("_") # 刀有多宽 就要损失掉多少 34 print(lst) 35 36 37 38 s = "周润发周星驰周笔畅周杰伦" 39 lst = s.split("周润发周星驰周笔畅周杰伦") # 切割的内容在边上. 会出现空字符串 40 print(lst)
3.格式化输出
1 # 格式化输出 2 print("我叫%s, 我今年%d岁了, 我喜欢干%s" % ("abs", 18, "python")) 3 print("我叫{}, 我今年{}岁了, 我喜欢干{}".format("abs", 18, "python")) 4 print("我叫{0}, 我今年{1}岁了, 我喜欢干{2}".format("abs", 18, "python")) 5 print("我叫{name}, 我今年{age}岁了, 我喜欢干{hobby}".format(name="sbs", age=18, hobby="python"))
4.查找
1 s = "今天的内容非常简单.你们信吗? 作业也很容易. 就是整理不太好" 2 print(s.startswith("太好了")) 3 print(s.endswith("太好了")) 4 5 6 s = "胡辣汤炸鸡啤酒烤鸭酱肘锅包肉炸鸡炸鸡炸鸡" 7 print(s.count("炸鸡")) # 计数 8 print(s.find("疙瘩汤")) # 如果找不到返回-1 用这个 9 print(s.index("疙瘩汤")) # 如果找不到报错.
5.条件判断
1 s = "一二壹贰叁肆萬两" 2 print(s.isnumeric()) 3 4 # 条件判断 5 s14 = "123.16" 6 s15 = "abc" 7 s16 = "_abc!@" 8 # 是否由字⺟和数字组成 9 print(s14.isalnum()) 10 print(s15.isalnum()) 11 print(s16.isalnum()) 12 # 是否由字⺟组成 13 print(s14.isalpha()) 14 print(s15.isalpha()) 15 print(s16.isalpha()) 16 # 是否由数字组成, 不包括⼩数点 17 print(s14.isdigit()) 18 print(s14.isdecimal()) 19 print(s14.isnumeric()) # 这个⽐较⽜B. 中⽂都识别. 20 print(s15.isdigit()) 21 print(s16.isdigit())
6.计算字符串的长度
1 s = "我是上帝, 你也是上帝" 2 print(len(s)) # 内置函数len(字符串) 返回给你字符串的长度
for循环
我们可以使⽤for循环来便利(获取)字符串中的每⼀个字符
语法:
for 变量 in 可迭代对象:
pass
可迭代对象: 可以⼀个⼀个往外取值的对象
1 s = "朱元璋朱棣" 2 count = 0 3 while count < len(s): 4 print(s[coount]) 5 count += 1 6 7 s = "朱元璋朱棣朱建峰" 8 #for循环 9 #for变量 in 可迭代对象: 10 #把可迭代对象中的每一个元素 ,分别赋值给前面的变量,可以方便可迭代对象的遍历 11 for c in s: 12 print(s) 13 14 15 了解一下 报错 16 for i in 10: 17 print(i) 18 19 TypeError: 'int' object is not iterable 20 错误类型:整数对象不能迭代
- list
什么是列表
能装东西的东西,列表中装的数据是没有限制的,32位 python可以存放: 536870912个元素,
64位可以存放: 1152921504606846975个元素.大小基本上是够用的
列表使用[]来表示. 在列表中每个元素元素之间用逗号隔开
索引
索引和切片参照字符串
一排数字,反应第某个位置的字符 ,索引的下标从0开始,使用[]来获取数据
切片:[start:end:step] 顾头不顾腚 最后一个取不到
开始:结尾:步长
1 lst = ["上海滩","西游记","家有儿女","奥特曼","包青天","少年包青天"] 2 print(lst[3]) 3 print(lst[-4]) 4 print(lst[-1][1:3])
切片:[start:end:step] 顾头不顾腚 最后一个取不到
开始:结尾:步长 step:步长.如果是+从左往右. 如果是-从右往左 每n个取1个
1 # lst = ["上海滩","西游记","家有儿女","奥特曼","包青天","少年包青天"] 2 # 切片 3 # print(lst[1:3]) # 切片出来的是列表. 4 # print(lst[1:5:2]) 5 # print(lst[-1:-4:-2])
增删改查
新增:
1.append() 追加
2.insert() 插入
3.extend() 迭代增加
1 # lst = [] 2 # lst.append("周杰伦") # 追加 在最后添加, 效率比较高 3 # lst.append("周芷若") 4 # lst.append("周公瑾") 5 # print(lst) 6 7 # lst = ["刘德华", "渣渣辉", "古天乐", "陈小春"] 8 # lst.insert(2,"马德华") # 插入, 可能会导致元素移动 9 # print(lst) 10 11 # lst = ["刘昊然", "张一山", "徐峥", "黄渤"] 12 # lst.extend(["刘能", "赵四", "广坤"]) 13 # print(lst)
删除:
1.remove() 指定元素
2.pop() 弹
3.clear() 清空
4.del
1 # 删除 pop, remove, clear, del 2 # lst = ["刘能", "广坤", "皮长山", "大脚"] 3 4 # lst.pop(2) # 可以指定元素删除(索引) 5 # print(lst) 6 # s1 = lst.pop() # 默认弹出最后一个 7 # print(s1) 8 # s2 = lst.pop() 9 # print(s2) 10 # print(lst) 11 12 # lst.remove("广坤") 13 # lst.remove("大脚") 14 # print(lst) 15 16 # lst = ["语文", "数学", "地理", "历史", "英语", "化学"] 17 18 # lst.clear() # 清空 19 20 # 可以切片删除 21 # del lst[2] 22 # del lst[0] 23 # del lst[::2] 24 # print(lst)
修改:
索引修改
1 # lst = ["功夫", "大话西游", "少林寺", "无间道", "战狼", "战狼2"] 2 # # lst[2] = "西西里的美丽传说" 3 # lst[-3] = "新世界" 4 # lst[1:3] = ["一步之遥"] 5 # lst[1:5:2] = ["胡辣汤", "烩面"] # 注意如果步长不是1. 那么元素的个数要匹配 6 # print(lst)
查询:
for el in list:
print(el)
# 列表是一个可迭代对象. 可以使用for循环 # for el in list: # print(el)
相关操作:
1 lst = ["马化腾", "马云", "刘强东", "周鸿祎", "李彦宏", "马云", "马云"] 2 print(lst.count("马云")) #出现几次 3 4 lst = [1.,15,55,54,5,9,64,4,6] 5 lst.sort() #正序 6 lst.sort(reverse=True) 倒序排序 7 8 lst.reverse() 翻转 9 10 11 print(len(lst)) 长度
嵌套
元组和列表都可以进行嵌套
1 # lst = ["周润发", "周星驰", "周笔畅", "周公瑾", ["九品芝麻官", ["吴孟达", "ads", "林雪"],"算死草", "赌侠", "赌圣", "整蛊专家"]] 2 # 3 # lst[4][1][1] = lst[4][1][1].capitalize() 4 # print(lst)
- 元组
不可变的列表,只读列表,由小括号()表示.元素与元素之间用逗号隔开,数据类型没有限制
如果是空元组:tuple()
一个元素(1,)
1 # 清朝皇帝 (努尔哈赤, 皇太极, 顺治, 康熙, 雍正, 乾隆) 这些是不可变的 怎么都不会变的 2 3 # huang = ("努尔哈赤", "皇太极", "顺治", "康熙", "雍正", "乾隆", "嘉庆", "道光", "光绪", "咸丰") 4 # # huang[1] = "朱元璋" # 报错 'tuple' object does not support item assignment 5 # print(huang) 6 7 # 小括号在计算机里还表示算数优先级 8 # print((8+3)*7) 9 10 # tu = (1,) # 加了逗号, 就是元组了 11 # tu = ("哈哈","呵呵","嘿嘿",) 12 # print(type(tu))8 13 # lst = list() # [] 14 # tu = tuple() # 空元组 15 16 # 元组也有索引和切片 和列表一样和字符串也一样 17 # tu = ("iphone", "nokia", "砸核桃", "Lenovo", "HTC", "Honor") 18 # print(tu[-1]) 19 # print(tu[1:3]) 20 # print(tu[1:5:2]) 21 22 # 不可变指的是第一层元素不可变, 第二层取决于你的数据类型 23 # tu = (1, 2, 5, ["胡辣汤", "滋滋冒油的大猪蹄子", "酱猪肘", "香喷喷的米饭", "脆皮炸鸡"]) 24 # tu[3].append("锅包肉") 25 # print(tu) 26 27 # tu = ("孙悟空", "白骨精", "哪吒", "二师兄", "妲己") 28 # 29 # for el in tu: # element 元素 30 # print(el)
range
1 #range() 2 for i in range(100): 0-99 3 print(i) 4 5 for i in range(3,8): 34567 没有8 6 print(i) 7 8 for i in range(5,10,2): 从5到10 步长是2 9 print(i) 10 11 12 # range(边界) 从0到这个边界 13 # range(start, end) 从start到end结束. 不能到end 14 # range(start, end, step) 从start到end. 步长是step 15 16 17 lst = ["张无忌", "张三丰", "张翠山", "张一山", "张磊", "张伟", "张角"] 18 for i in lst: 19 print(i) 没有索引 20 21 22 for i in range(len(lst)): 23 print(lst[i]) 有索引 24 25 tu = ("首页", "登录", "注册", "购物", "退出") 26 for i in range(len(tu)): 27 print(i,tu[i])
遍历列表的时候可以使用range
for i in range(len(list))
print(i,list[i])
- 字典
什么是字典
字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在dict中key是唯⼀的. 在保存的时候, 根据key来计算出⼀个内存地址. 然后将key-value保存在这个地址中.这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的,如果你搞不懂什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的,那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址⽽规定的.
已知的可哈希(不可变)的数据类型:int ,str,tuple,bool
不可哈希(可变)的数据类型:list,dict,set
语法 :
{key1: value1, key2: value2....}
注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据
1 # 合法 2 dic = {123: 456, True: 999, "id": 1, "name": 'sylar',"age": 18, "stu": ['帅哥', '美女'], (1, 2, 3): '麻花藤'} 3 print(dic[123]) 4 print(dic[True]) 5 print(dic['id']) 6 print(dic['stu']) 7 print(dic[(1, 2, 3)]) 8 # 不合法 9 # dic = {[1, 2, 3]: '周杰伦'} # list是可变的. 不不能作为key 10 # dic = {{1: 2}: "哈哈哈"} # dict是可变的. 不不能作为key 11 dic = {{1, 2, 3}: '呵呵呵'} # set是可变的, 不不能作为key
dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽而hash表 不是连续的. 所以不能进行切片工作. 它只能通过key来获取dict中的数据
字典的增删改查
增加
dict[新key] = value
dict.setdefault()
1 dic = {} 2 dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增⼀个key-value的组 3 合进dict 4 dic['age'] = 18 5 print(dic) 6 # 如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值 7 dic.setdefault('李嘉诚') # 也可以往⾥⾯设置值. 8 dic.setdefault("李嘉诚", "房地产") # 如果dict中已经存在了. 那么setdefault将不会 9 起作⽤ 10 print(dic) 11 12 # dic = {} 13 # # 徐峥:人在囧途 14 # dic['徐峥'] = "人在囧途" # 直接用key往里面存数据即可 15 # dic['黄渤'] = "疯狂的石头" 16 # dic["王宝强"] = "天下无贼" 17 # dic["王宝强"] = "士兵突击" # 如果key已经存在。 那么会替换掉原来的value, 修改 18 # 19 # dic.setdefault("黄秋生") 20 # dic.setdefault("黄秋生", "无间道") # 如果存在了key, 不会执行新增 21 # 22 # print(dic)
删除
pop(key)
popitem()
clear()
del dict[key]
1 dic = {"黄日华": "天龙八部", "吕颂贤": "笑傲江湖", "苏有朋": "倚天屠龙记", "六小龄童": "西游记"} 2 # dic.pop("吕颂贤") # 指定key删除 3 # dic.popitem() # 随机删除 4 # del dic["黄日华"] # 删除 5 # dic.clear() # 清空字典 6 7 print(dic)
修改
dic[key] = 新值
update()
查询
1. 用key直接查询 dict[key]
2. get(key, 如果key不存在返回的数据)
3. setdefault() 1. 执行新增流程. 2. 查询结果
1 dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙", "李大国": "小鬼"} 2 # dic['王木生'] = "刘伟" 3 dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "冯提莫", "王大拿": "金老板"} 4 dic.update(dic2) 5 print(dic) 6 7 # 查询 8 dic = {'刘能': '大阳哥', '赵四': 'github', '王木生': '汪峰', '谢大脚': '冯提莫', '李大国': '小鬼', '王大拿': '金老板'} 9 # 1. 最直观。 直接用key 10 print(dic['周杰伦']) # 当这个key不存在的时候会报错 11 # 2. get方法 12 print(dic.get("谢大脚", "周杰伦不在这里")) # 没有key. 返回None 13 # 3. setdefault() 1. 新增(先看有没有key, 如果有就过, 如果没有,执行新增) 2.根据key把值返回 14 dic = {} 15 dic["盖伦"] = "德玛西亚之力" 16 value = dic.setdefault("菲奥娜", "无双剑姬") # 新增 17 value2 = dic.setdefault("盖伦", "刘伟") # 由于已经存在了key。 所以新增不执行。 直接查询结果 18 value3 = dic.setdefault("薇恩", "坑") 19 20 print(value3) 21 print(dic)
相关操作
1 dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"} 2 3 # 对字典的遍历 4 # print(dic.keys()) # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表 5 # for key in dic.keys(): 6 # print(key) # 拿到key 7 # print(dic[key]) # 拿到value 8 9 # print(dic.values()) 10 # for value in dic.values(): 11 # print(value) 12 13 14 # 也可以遍历字典 15 # [('汪峰', '大陆音乐半壁江山'), ('周杰伦', '亚洲音乐天王'), ('罗志祥', '亚洲舞王')] 16 # print(dic.items()) # 拿到的是key和value 17 for k, v in dic.items(): # 当需要遍历字典. 在操作中涉及到key和value的时候. 18 print(k) # 元组 19 print(v) 20 21 22 # 字典本身是一个可迭代对象,可以直接进行for循环 23 for el in dic: # 直接拿到key 24 print(el) 25 print(dic[el]) 26 27 # 前面的变量的个数和后面解包的个数一致 28 # a, b = (10, 20) # 解构, 解包 29 # print(a) 30 # print(b)
字典的嵌套
1 wf = { 2 "name": "汪峰", 3 "age": 48, 4 "成名曲": "春天里", 5 "wife": { 6 "name": "章子怡", 7 "age": 39, 8 "工作": "演员" 9 }, 10 "children":[ 11 {"num": "001", "name": "汪一", "hobby": "唱歌"}, 12 {"num": "002", "name": "汪二", "hobby": "演戏"} # wf['children'][1]['name'] 13 ] 14 } 15 16 # wf['wife']['age'] = wf['wife']['age'] + 10 17 # print(wf)