将结果或内容呈现给用户
print("休对故人思故国,且将新火试新茶,诗酒趁年华")
# 输出不换行,并且可以指定以什么字符结尾
print("青山依旧在",end= ",")
print("几度夕阳红",end= "。")
print(222)
print(2 ** 2) # 2的2次方
print(10 / 2)
# 单引号和双引号一样
print("Hello World")
print("上海市浦东新区")
print("我是'艾伦'")
# """表示多行字符串
print("""
人生到处何所似,
应是飞鸿踏雪泥。
"""
)
对于字符串:
+
print(3 * "我想吃拉面")
bool类型种共有两个值:True/False
print(1 > 2)
print(False)
print(True)
print(1 == 1)
name = input("请输入你的用户名: ")
if name.lower() == "zed":
print(name + "登录成功")
else:
print("登录失败")
补充:
1 == ‘Alan’ # 可以比较
1 > ‘Alan’ # 不可以进行比较
不同的数据类型有不同的功能,如果想要做转换,可遵循一个原则,想转换什么类型就让它包裹住
如:str(666)是将整型转化为字符串,int(“888”)是将字符串转为整型
类型转换
str(…)
int(…)
bool(…)
注意:
name = "Zed"
age = 24
flag = 1 > 2
print(name)
print(age)
print(flag)
三个规范:
情景一
name = "sushi"
在计算机的内存中创建一块区域保存字符串”sushi”,name变量名则指向这块区域。
情景二
name = "sushi"
name = "alex"
在计算机的内存中创建一块区域保存字符串”sushi”,name变量名则指向这块区域。然后又再内存中创建了一块域保存字符串”alex”,name变量名则指向”alex”所在的区域,不再指向”sushi”所在区域(无人指向的数据会被标记为垃圾,由解释器自动化回收)
情景三
name = "sushi"
new_name = name
在计算机的内存中创建一块区域保存字符串”sushi”,name变量名则指向这块区域。new_name变量名指向name变量,因为被指向的是变量名,所以自动会转指向到name变量代表的内存区域。
情景四
name = "sushi"
new_name = name
name = "alex"
在计算机的内存中创建一块区域保存字符串”sushi”,name变量名则指向这块区域(灰色线), 然后new_name指向name所指向的内存区域,最后又创建了一块区域存放”alex”,让name变量指向”alex”所在区域.
情景五
num = 18
age = str(num)
在计算机的内存中创建一块区域保存整型18,name变量名则指向这块区域。通过类型转换依据整型18再在内存中创建一个字符串”18”, age变量指向保存这个字符串的内存区域。
# 声明一个name变量
name = 'Alan'
"""
这是一个多行注释
这是一个多行注释
这是一个多行注释
这是一个多行注释
"""
实现用户与程序之间的交互
# 接收用户输入的变量
name = input("请输入用户名: ")
特别注意:
用户输入的任何内容都是字符串;
if 条件:
...
else:
...
示例1
username = "sushi"
password = "666"
if username == "sushi" and password == "666":
print("恭喜你,登录成功")
else:
print("登录失败")
示例2
username = "sushi"
if username == "sushi" or username == "alex":
print("VIP大会员用户")
else:
print("普通用户")
示例3
number = 19
if number%2 == 1:
print("number是奇数")
else:
print("number是偶数")
number = 19
data = number%2 == 1
if data:
print("number是奇数")
else:
print("number是偶数")
示例4
if 条件:
成立
print("开始")
if 5 == 5:
print("5等于5")
print("结束")
if 条件A:
A成立,执行此缩进中的所有代码
...
elif 条件B:
B成立,执行此缩进中的所有代码
...
elif 条件C:
C成立,执行此缩进中的所有代码
...
else:
上述ABC都不成立。
if 条件A:
if 条件A1:
...
else:
...
elif 条件B:
...
模拟10086客服
print("欢迎致电10086,我们提供了如下服务: 1.话费相关;2.业务办理;3.人工服务")
choice = input("请选择服务序号")
if choice == "1":
print("话费相关业务")
cost = input("查询话费请按1;交话费请按2")
if cost == "1":
print("查询话费余额为100")
elif cost == "2":
print("交互费")
else:
print("输入错误")
elif choice == "2":
print("业务办理")
elif choice == "3":
print("人工服务")
else:
print("序号输入错误")
while 条件:
...
...
...
num = 1
while num < 4:
print("2024发大财")
num += 1
break,用于while循环中终止循环;
continue, 在循环中用于结束本次循环,开始下一次循环;
当while后的条件不成立时,else中的代码就会执行
while 条件:
代码
else:
代码
num = 1
while num < 5:
print("2024一夜暴富")
num += 1
else:
print("2024一定会发财")
# 引入
name = "苏东坡"
age = 18
text = "我叫%s,今年%d岁" %(name,age)
message = "%(name)s你什么时候过来呀?%(user)s今天不在呀。" % {"name": "死鬼", "user": "李杰"}
print(message)
text = "%s,这个片我已经下载了90%%了,居然特么的断网了" %"兄弟"
print(text)
# 输出:
兄弟,这个片我已经下载了90%了,居然特么的断网了
text1 = "我叫{0}, 今年{1}岁".format("Alan",19)
text2 = "我叫{0}, 今年{1}岁,真实姓名是{0}".format("Alan",19)
print(text1)
print(text2)
################################
text = "我叫{n1},今年18岁".format(n1="Alan")
text = "我叫{n1},今年{age}岁".format(n1="Alan",age=18)
text = "我叫{n1},今年{age}岁,真是的姓名是{n1}。".format(n1="Alan",age=18)
################################
# 先定义格式化字符串,再调用format方法传递参数
text = "我叫{0},今年{1}岁"
data1 = text.format("Alan",666)
data2 = text.format("alex",73)
address = "{0}市{1}区{2}街道"
print(address.format("上海","浦东新","溜溜"))
hobby1 = "打游戏"
hobby2 = "打球"
message = f"我喜欢{hobby1},还喜欢{hobby2}"
###
输出: 我喜欢打游戏,还喜欢打球
###
常见数据类型:
number = 10
age = 99
无
v1 = 5
print(bin(v1)) # 0b101
# 调用v1(int)的独有功能,获取v1的二进制有多少个位组成。
result1 = v1.bit_length()
print(result1) # 3
v2 = 10
print(bin(10)) # 0b1010
# 调用v2(int)的独有功能,获取v2的二进制有多少个位组成。
result2 = v2.bit_length()
print(result2) # 4
加减乘除
v1 = 4
v2 = 8
v3 = v1 + v2
在项目开发和面试题中经常会出现一些 “字符串” 和 布尔值 转换为 整型的情况。
# 布尔值转整型
n1 = int(True) # True转换为整数 1
n2 = int(False) # False转换为整数 0
# 字符串转整型
v1 = int("186",base=10) # 把字符串看成十进制的值,然后再转换为 十进制整数,结果:v1 = 186
v2 = int("0b1001",base=2) # 把字符串看成二进制的值,然后再转换为 十进制整数,结果:v1 = 9 (0b表示二进制)
v3 = int("0o144",base=8) # 把字符串看成八进制的值,然后转换为 十进制整数,结果:v1 = 100 (0o表示八进制)
v4 = int("0x59",base=16) # 把字符串看成十六进制的值,然后转换为 十进制整数,结果:v1 = 89 (0x表示十六进制)
# 浮点型(小数)
v1 = int(8.7) # 8
所以,如果以后别人给你一个按 二进制、八进制、十进制、十六进制 规则存储的字符串时,可以轻松的通过int转换为十进制的整数。
在python2中跟整数相关的数据类型有两种:int(整型)、long(长整型),他们都是整数只不过能表示的值范围不同。
在python3中去除了long只剩下:int(整型),并且 int 长度不在限制。
Py3:
v1 = 9/2
print(v1) # 4.5
py2:
v1 = 9/2
print(v1) # 4
from __future__ import division
v1 = 9/2
print(v1) # 4.5
"xxxx".方法名(参数)
s = "xxx"
s.方法名(...)
# 案例
s.startswith("北京市")
s.endswith("大厦")
message.isdecimal()
v1 = "123"
print(v1.isdecimal()) # True
v2 = "①"
print(v2.isdecimal()) # False
v3 = "123"
print(v3.isdigit()) # True
v4 = "①"
print(v4.isdigit()) # True
msg = " H e ll o啊,树哥 "
data = msg.strip()
print(data) # 将msg两边的空白去掉,得到"H e ll o啊,树哥"
msg = " H e ll o啊,树哥 "
data = msg.lstrip()
print(data) # 将msg两边的空白去掉,得到"H e ll o啊,树哥 "
msg = " H e ll o啊,树哥 "
data = msg.lstrip()
print(data) # 将msg两边的空白去掉,得到"H e ll o啊,树哥 "
案例:
# 案例
code = input("请输入4位验证码:") # FB88 fb88
value = code.upper() # FB88
data = value.strip() # FB88
if data == "FB87":
print('验证码正确')
else:
print("验证码错误")
# 注意事项
"""
code的值"fb88 "
value的值"FB88 "
data的值"FB88"
"""
去除两边指定的内容:
msg = "哥H e ll o啊,树哥"
data = msg.strip("哥")
print(data) # 将msg两边的空白去掉,得到"H e ll o啊,树"
msg = "my name is the flash"
data = msg.upper()
print(data) # MY NAME IS THE FLASH
msg = "MY NAME IS THE FLASH"
data = msg.lower()
print(data) # my name is the flash
data = "你是个好人,但是好人不合适我"
value = data.replace("好人","贱人")
print(data) # "你是个好人,但是好人不合适我"
print(value) # "你是个贱人,但是贱人不合适我"
# 案例
video_file_name = "喜剧片.mp4"
new_file_name = video_file_name.replace("mp4","avi") # "喜剧片.avi"
final_file_name = new_file_name.replace("喜剧","科幻") # "科幻片.avi"
print(final_file_name)
data = "Alan|root|alan@qq.com"
result = data.split('|') # ["Alan","root","alan@qq.com"]
result2 = data.split('|', 1) # 切一个,遇到第一个切
result3 = data.rsplit('@') #
print(data) # "Alan|root|alan@qq.com"
print(result) # 输出 ["Alan","root","alan@qq.com"] 根据特定字符切开之后保存在列表中,方便以后的操作
data_list = ["Alan", "", "a", "huge","man"]
new_str = " ".join(data_list) # Alan is a huge man
print(new_str)
address = "{0}市{1}区{2}街道"
data = address.format("上海","浦东新", "潍坊")
print(data) #上海市浦东新区潍坊街道
data = "苏东坡" # unicode,字符串类型
v1 = data.encode("utf-8") # utf-8,字节类型
v2 = data.encode("gbk") # gbk,字节类型
print(v1) # b'\xe8\x8b\x8f\xe4\xb8\x9c\xe5\x9d\xa1'
print(v2) # b'\xcb\xd5\xb6\xab\xc6\xc2'
s1 = v1.decode("utf-8") # 苏东坡
s2 = v2.decode("gbk") # 苏东坡
print(s1)
print(s2)
v1 = "王老汉"
# data = v1.center(21, "-")
# print(data) #---------王老汉---------
# data = v1.ljust(21, "-")
# print(data) # 王老汉------------------
# data = v1.rjust(21, "-")
# print(data) # ------------------王老汉
data = "alex"
v1 = data.zfill(10)
print(v1) # 000000alex
# 应用场景:处理二进制数据
data = "101" # "00000101"
v1 = data.zfill(8)
print(v1) # "00000101"
1、相加,字符串拼接
2、相乘,字符串 * 整数
3、长度
data = "zed"
print(len(data)) # 3
4、获取字符串中的字符,索引
message = "北京欢迎你"
print(message[0]) # 北
print(message[1]) # 京
print(message[2]) # 欢
字符串中是能通过索引取值,无法修改值;
5、获取字符串中的子序列,切片
message = "就像阳光穿破黑夜"
print(message[0:2]) # 就像
print(message[2:]) # 阳光穿破黑夜
print(message[:2]) # 就像
print(message[6:-1]) # 黑
print(message[6:len(message)]) # 黑夜
字符串切片自己读取数据,无法修改数据
6、步长,跳着取字符串的内容
name = "生活不是电影,生活比电影苦"
print( name[ 0:5:2 ] ) # 输出:生不电 【前两个值表示区间范围,最有一个值表示步长】
print( name[ :8:2 ] ) # 输出:生不电, 【区间范围的前面不写则表示起始范围为0开始】、
# print( name[ 2::2 ] ) # 输出:不电,活电苦
# print( name[ 2::3 ] ) # 输出:不影活影
print( name[ 2::3 ] ) # 输出:不电,活电苦 【区间范围的后面不写则表示结束范围为最后】
print( name[ ::2 ] ) # 输出:生不电,活电苦 【区间范围不写表示整个字符串】
print( name[ 8:1:-1 ] ) # 输出:活生,影电是不 【倒序】
7、循环
message = "休对故人思故国,且将新火试新茶,诗酒趁年华"
index = 0
while index < len(message):
print(message[index])
index += 1
message = "休对故人思故国,且将新火试新茶,诗酒趁年华"
for char in message:
print(char)
range(10) # [0,1,2,3,4,5,6,7,8,9]
range(1, 10) # [1,2,3,4,5,6,7,8,9]
range(1, 10, 2) #[1,3,5,7,9]
range(10, 1, -1) # [10,9,8,7,6,5,4,3,2]
for i in range(10)
print(i)
message = "休对故人思故国,且将新火试新茶,诗酒趁年华"
for i in range(5):
print(message[i])
####################
for i in range(len(message)):
print(message[i])
num = 999
data = str(num)
print(data) # "999"
name = "Alan"
列表(list),是一个可变的容器,在里面可以存放多个不同类型的元素
user_list = ["李白","苏轼","辛弃疾"]
number_list = [92,93,94,95]
data_list = [1,True,"Alan", "张楚岚"]
user_list = []
user_list.append("盖聂")
user_list.append(123)
user_list.append(False)
print(user_list) # ["盖聂",123,False]
不可变类型:字符串、布尔、整型
可变类型:列表
1、追加,在原有列表中尾部追加值
data_list = []
data_list.append("s1")
data_list.append("s2")
2、批量追加,将一个列表中的元素逐一添加到另外一个列表
tools = ["板砖","菜刀"]
weapon = ["AK47","MP5"]
tools.extend(weapon)
print(tools)
3、插入,在原列表的指定索引位置插入值
user_list = ["李白","杜甫","白居易"]
user_list.insert(1,"王维") # ["李白","王维","杜甫","白居易"]
4、在原列表中根据值删除(从左到右找到第一个删除,慎用!里面没有会报错)
user_list = ["李白","苏轼","辛弃疾","孙笑川"]
if "孙笑川" in user_list:
user_list.remove("孙笑川")
print(user_list)
5、在原列表中根据索引删除某个元素(根据索引位置删除)
user_list = ["李白","苏轼","辛弃疾","孙笑川"]
user_list.pop(1) # 删除索引为1的元素
user_list.pop() #删除最后一个元素 ["李白","辛弃疾"]
item = user_list.pop()
6、清空原列表
user_list = ["李白","苏轼","辛弃疾","孙笑川"]
user_list.clear()
print(user_list) # []
7、根据值获取索引(从左到右找到第一个,慎用!找不到会报错)
user_list = ["李白","苏轼","辛弃疾","孙笑川"]
if "孙笑川" in user_list:
index = user_list.index("孙笑川")
print(index) # 3
8、列表元素排序
user_list = ["李白","苏轼","辛弃疾","孙笑川"]
user_list.sort()
print(user_list) # 默认从小到大排序
print(user_list.sort(reverse=True)) # 从大到小排序
# 注意:排序时内部元素无法进行比较时,程序会报错(尽量数据类型统一)
9、反转原列表
user_list = ["李白","苏轼","辛弃疾","孙笑川"]
user_list.reverse()
print(user_list) # 列表会反转
1、相加,两个列表相加获取生成一个新的列表
data_list1 = ["李白","杜甫"]
data_list2 = ["苏轼","辛弃疾"]
data_list3 = data_list1 + data_list2
print(data_list3) # ["李白","杜甫","苏轼","辛弃疾"]
2、相乘(列表*整型,将列表中的元素再创建N份并生成一个新的列表)
data_list = ["李白","杜甫"] * 2
print(data_list) # ["李白","杜甫","李白","杜甫"]
3、运算符in包含
由于列表内部是由多个元素组成,可以通过in来判断元素是否在列表中
user_list = ["李白","杜甫","苏轼","白居易"]
result1 = "白居易" in user_list
result2 = "辛弃疾" in user_list
print(result1) # True
print(result2) # False
4、获取长度
user_list = ["李白","杜甫","苏轼","白居易"]
print(len(user_list)) # 4
5、索引
user_list = ["李白","杜甫","苏轼","白居易"]
print(user_list[3]) # 白居易
del user_list[0] #删除第0个元素
6、切片
# 读
user_list = ["范德彪","刘华强",'尼古拉斯赵四']
print( user_list[0:2] ) # ["范德彪","刘华强"]
print( user_list[1:] )
print( user_list[:-1] )
# 改
user_list = ["范德彪", "刘华强", '尼古拉斯赵四']
user_list[0:2] = [11, 22, 33, 44]
print(user_list) # 输出 [11, 22, 33, 44, '尼古拉斯赵四']
user_list = ["范德彪", "刘华强", '尼古拉斯赵四']
user_list[2:] = [11, 22, 33, 44]
print(user_list) # 输出 ['范德彪', '刘华强', 11, 22, 33, 44]
user_list = ["范德彪", "刘华强", '尼古拉斯赵四']
user_list[3:] = [11, 22, 33, 44]
print(user_list) # 输出 ['范德彪', '刘华强', '尼古拉斯赵四', 11, 22, 33, 44]
user_list = ["范德彪", "刘华强", '尼古拉斯赵四']
user_list[10000:] = [11, 22, 33, 44]
print(user_list) # 输出 ['范德彪', '刘华强', '尼古拉斯赵四', 11, 22, 33, 44]
user_list = ["范德彪", "刘华强", '尼古拉斯赵四']
user_list[-10000:1] = [11, 22, 33, 44]
print(user_list) # 输出 [11, 22, 33, 44, '刘华强', '尼古拉斯赵四']
# 删
user_list = ["范德彪", "刘华强", '尼古拉斯赵四']
del user_list[1:]
print(user_list) # 输出 ['范德彪']
7、步长
user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"]
# 0 1 2 3 4
print( user_list[1:4:2] ) # 刘华强 宋小宝
print( user_list[0::2] ) #
print( user_list[1::2] ) #
print( user_list[4:1:-1] ) # 刘能 宋小宝 尼古拉斯赵四
# 案例:实现列表的翻转
user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"]
new_data = user_list[::-1]
print(new_data)
data_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"]
data_list.reverse()
print(data_list)
# 给你一个字符串请实现字符串的翻转?
name = "12345"
name[::-1]
8、for循环
user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"]
for item in user_list:
print(item)
user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"]
for index in range( len(user_list) ):
item = user_index[index]
print(item)
切记,循环的过程中对数据进行删除会踩坑
# 错误方式, 有坑,结果不是你想要的。
user_list = ["刘的话", "范德彪", "刘华强", '刘尼古拉斯赵四', "宋小宝", "刘能"]
for item in user_list:
if item.startswith("刘"):
user_list.remove(item)
print(user_list)
# 正确方式,倒着删除。
user_list = ["刘的话", "范德彪", "刘华强", '刘尼古拉斯赵四', "宋小宝", "刘能"]
for index in range(len(user_list) - 1, -1, -1):
item = user_list[index]
if item.startswith("刘"):
user_list.remove(item)
print(user_list)
name = "苏东坡"
list(name) # ["苏","东","坡"]
v1 = (11,22,33,44)
vv1 = list(v1) # [11,22,33,44]
v2 = {"alex", "alan","otto"}
vv2 = list(v2) # ["alex", "alan", "otto"]
嵌套
data = ["赵四",["1","2","3"],True, [11,22,[33,44]]]
列表(list):是一个有序且可变的容器,在里面可以存放多个不同类型的元素;
元组(tuple):是一个有序且不可变的容器,在里面可以存放多个不同类型的元素;
v1 = (11,22,33)
v2 = ("小明","Alan")
v3 = (True,123,"Alex",[11,22,33])
# 建议:在元组的最后一个元素后面多加一个逗号,用来表示它是一个元组
v3 = ("Alan",11, )
1、相加,两个列表相加获取一个新的元组
v1 = ("小明","小亮")
v2 = ("张三","李四")
v3 = v1 + v2
print(v3) # ("小明","小亮","张三","李四", )
2、相乘,列表*整型,将列表中的元素再创建N份
v1 = ("小明","小亮")
print(v1*2)
3、获取长度
user_tuple = ("小明","小亮","张三")
print(len(user_tuple)) # 3
4、索引
user_tuple = ("小明","小亮","张三")
print(user_tuple[1]) #小亮
5、切片
user_tuple = ("小明","小亮","张三")
print(user_tuple[0:2]) # 小明 销量
6、步长
user_tuple = ("小明","小亮","张三","李四","王五")
print(user_tuple[1:4:2])
print(user_tuple[4:1:-1])
# 反转tuple
new_user_tuple = user_tuple[::-1]
print(new_user_tuple)
7、for循环
user_tuple = ("小明","小亮","张三","李四","王五")
for item in user_tuple:
print(item)
for item in user_tuple:
if item == "张三":
continue
print(item)
目前,只有str、list、tuple可以被for循环
其他类型转换为元组,使用tuple(其他类型)
,目前只有字符串和列表可以转换为元组
data = tuple(其他)
# str/list
由于元组和列表都可以充当容器
,他们内部也可以放多个元组,并且也支持元素内的嵌套
set集合:无序、可变、不允许数据重复的容器
v1 = {1,"22",True,"Alex"}
无序:无法通过索引定位值
可变:可以添加和删除元素
v1 = {11,22,33}
v1.add(44)
print(v1) # {11,22,33,44}
不允许数据重复
v1 = {11,22,33}
v1.add(11)
print(v1) # 11 22 33
什么时候用到集合:
想要维护一大堆不重复的数据的时候,就可以用它,比如:做爬虫去网上找图片链接时,为了避免数据重复,可以选择用集合去存储链接地址
注意:定义空集合时候,只能使用v=set{}
,不能使用v={}(这样定义是一个空字典)
1、添加元素
data = {"苏东坡","白居易","辛弃疾"}
data.add("欧阳修")
print(data)
data = set()
data.add("周杰伦")
data.add("薛之谦")
print(data)
2、删除元素
data = {"苏东坡","白居易","辛弃疾","王富贵"}
data.discard("王富贵")
print(data)
3、交集
s1 = {"苏东坡","白居易","辛弃疾","王富贵"}
s2 = {"李白","杜甫","王勃","王富贵"}
s3 = s1 & s2 #取两个集合的交集
s4 = s1.intersection(s2) # 王富贵
print(s3,s4)
4、并集
s1 = {"苏东坡","白居易"}
s2 = {"李白","杜甫"}
s3 = s1 | s2
s4 = s1.union(s2)
print(s3,s4)
5、差集
s1 = {"刘能","赵四","皮常山"}
s2 = {"刘科长","赵市长","皮常山"}
s3 = s1 - s2 #取差集,s1中有且s2中没有的值
s3 = s1.difference(s2) #取差集,s1中有且s2中没有的值
1、减,计算差集
2、&,取交集
3、|,计算并集
4、长度
v1 = {"张三","李四","王五"}
data = len(v1)
print(data)
5、for循环
v1 = {"张三","李四","王五"}
for item in v1:
print(item)
其他类型如果想转换成集合类型,使用
set(其他类型)
,如果数据有重复会自动删除
注意: int/list/tuple/dict都可以转换为集合
因存储原理,集合的元素必须是可哈希的值,即:内部通过通过哈希函数把值转换成一个数字。
目前可哈希的数据类型:int、bool、str、tuple,而list、set是不可哈希的。
总结:集合的元素只能是 int、bool、str、tuple 。
转换成功
v1 = [11,22,33,11,3,99,22]
v2 = set(v1)
print(v2) # {11,22,33,3,99}
转换失败
v1 = [11,22,["alex","eric"],33]
v2 = set(v1) # 报错
print(v2)
user_set = {"苏东坡","alex","李璐"}
if "alex" in user_set:
print("在")
else:
print("不在")
类型 | 是否可变 | 是否有序 | 元素要求 | 是否可哈希 | 转换 | 定义空 |
---|---|---|---|---|---|---|
list | 是 | 是 | 无 | 否 | list(其他) | v=[]或v=list() |
tuple | 否 | 是 | 无 | 是 | tuple(其他) | v=()或v=tuple() |
set | 是 | 否 | 可哈希 | 否 | set(其他) | v=set() |
注意:由于True和False本质上存储的是 1 和 0 ,而集合又不允许重复,所以在整数 0、1和False、True出现在集合中会有如下现象:
v1 = {True, 1}
print(v1) # {True}
v2 = {1, True}
print(v2) # {1}
v3 = {0, False}
print(v3) # {0}
v4 = {False, 0}
print(v4) # {False}
Python中有一个特殊的值None类型,表示为空
目前可以转换为False的值有:
0
""
[] or list()
() or tuple()
set()
None
字典是无序、键不重复且元素只能是键值对的可变的容器
容器
元素必须是键值对
键不重复,重复则会被覆盖
data = {"k1": 1, "k1": 2}
print(data) # {"k1": 2}
无序(python3.6+之后字典就是有序了,之前字典是无序的)
d1 = {}
d2 = dict()
info = {
"age": 12,
"sex": "male",
"status": True,
"hobby": ["游戏", "读书"]
}
字典中对键值对的要求:
1、获取值
info = {
"name": "Alan"
"age": 12,
"sex": "male",
"status": True,
"hobby": ["游戏", "读书"]
}
age = info.get("age")
print(age)
name = info.get("name")
print(name)
address = info.get("address")
print(address) # None
birth = info.get("birth", "2001-01-28")
print(birth) # 2001-01-28
# 案例
user_list = {
"alex": "123",
"admin": "123456"
}
username = input("请输入用户名: ")
password = input("请输入密码: ")
pwd = user_list.get(username)
if pwd == None:
print("用户名不存在")
else:
if pwd == password:
print("登录成功")
else:
print("密码错误")
# 写代码的准则:简单的逻辑放在前面,复杂的逻辑放在后面
2、获取所有的键
info = {
"name": "Alan"
"age": 12,
"sex": "male",
"status": True,
"hobby": ["游戏", "读书"]
}
data = info.keys()
print(data) # 输出(["name","age","sex","status","hobby"]) 高仿列表
print(list(data))
注意:在python2中字典.keys()
直接获取到的是列表,而python3中返回的是高仿列表,高仿列表可以被循环显示
for key in info.keys():
print(key)
# 判断某个key是否存在字典中
if "age" in info.keys():
print("age是字典的键")
3、获取所有的值
info = {
"name": "Alan"
"age": 12,
"sex": "male",
"status": True,
"hobby": ["游戏", "读书"]
}
data = info.values()
print(data) # dict_value(["Alan",12,"male","True",["游戏",读书]])
注意:在python2中字典.values()
直接获取到的是列表,而python3中返回的是高仿列表,高仿列表可以被循环显示
for value in info.values():
print(value)
if 12 in info.values():
print("12是字典的值")
4、获取所有的键值
info = {
"name": "Alan"
"age": 12,
"sex": "male",
"status": True,
"hobby": ["游戏", "读书"]
}
data = info.items()
print(data) # 输出dict_items() ([('age', 12),("name",Alan),....])
for item in info.items():
print(item) #item是一个元组
print(item[0],item[1])
# -------------------
for key,value in info.items():
print(key,value) #key代表键,value代表值
5、设置值
info = {
"name": "Alan"
"age": 12,
"sex": "male",
"status": True,
"hobby": ["游戏", "读书"]
}
# 没有这个键值是添加,有这个键的话是修改
data.setdefault("salary","15000")
6、批量更新键值对
info = {
"name": "Alan"
"age": 12,
"sex": "male",
"status": True,
"hobby": ["游戏", "读书"]
}
info.update({"age": 18, "name": "Bob"})
print(info) # info中没有的键则直接添加,有的键则是更新值,主打一个批量更新
7、指定移除键值对
info = {"age": 12, "status": True, "name": "Alex"}
data = info.pop("age")
print(info) # {"status": True, "name": "Alex"}
print(data) # 12
8、按照顺序移除(后进先出)
info = {"age": 12, "status": True, "name": "Alex"}
data = info.popitem()
print(info) # {"age": 12, "status": True}
print(data) # {"name": "Alex"}
# 练习题
"""
结合下面的两个变量 header 和 stock_dict实现注意输出股票信息,格式如下:
SH601778,股票名称:中国晶科、当前价:6.29、涨跌额:+1.92。
SH688566,股票名称:吉贝尔、当前价:... 。
...
"""
header = ['股票名称', '当前价', '涨跌额']
stock_dict = {
'SH601778': ['中国晶科', '6.29', '+1.92'],
'SH688566': ['吉贝尔', '52.66', '+6.96'],
'SH688268': ['华特气体', '88.80', '+11.72'],
'SH600734': ['实达集团', '2.60', '+0.24']
}
for key,value in stock_dict.items():
# 'SH601778', ['中国晶科', '6.29', '+1.92']
textList = list()
for index in range(len(header)):
str = "{0}: {1}".format(header[index],value[index])
textList.append(str)
print("{0}, {1}".format(key, ", ".join(textList)))
1、求并集(python3.9加入)
v1 = {"k1": 1, "k2": 2}
v2 = {"k2": 22, "k3": 33}
v3 = v1 | v2
print(v3) # {"k1": 1, "k2": 22, "k3": 33}
2、长度
info = {"age": 12, "status": True, "name": "Alex"}
print(len(info)) # 3
3、是否包含
info = {"age": 12, "status": True, "name": "Alex"}
v1 = "age" in info
print(v1) # true
v2 = "age" in info.keys()
4、索引(键)
字典区别于元组和列表,字典的索引是键,而列表和元组则是0 1 2
info = {"age": 12, "status": True, "name": "Alex"}
print(info["age"]) # 输出12
print(info["staus"]) # 输出True
print(info["xxx"]) # 报错
# 建议使用 info.get("key")
5、根据键修改值和添加值和删除键值对
info = {"age": 12, "status": True, "name": "Alex"}
info["gender"] = "男"
print(info) #{"age": 12, "status": True, "name": "Alex","gender": "男"}
info = {"age": 12, "status": True, "name": "Alex"}
del info["age"] # 保证键存在,才能删除
print(info) # {"status": True, "name": "Alex"}
6、for循环
info = {"age": 12, "status": True, "name": "Alex"}
for key in info.keys():
print(key)
for value in info.values():
print(value)
for key,value in info.items():
print(key, value)
想要转换为字典.
v = dict( [ ("k1", "v1"), ["k2", "v2"] ] )
print(v) # { "k1":"v1", "k2":"v2" }
info = { "age":12, "status":True, "name":"武沛齐" }
v1 = list(info) # ["age","status","name"]
v2 = list(info.keys()) # ["age","status","name"]
v3 = list(info.values()) # [12,True,"武沛齐"]
v4 = list(info.items()) # [ ("age",12), ("status",True), ("name","武沛齐") ]
info = {
"alex":["肝胆","铁锤"],
"老男孩":["二蛋","缺货"]
}
for "alex" in info:
print("在")
info = {
"alex":["肝胆","铁锤"],
"老男孩":["二蛋","缺货"]
}
v1 = info["alex"]
v2 = info.get("alex")
我们已学了很多数据类型,在涉及多种数据类型之间的嵌套时,需注意一下几点:
字典的键必须可哈希(list/set/dict不可哈希)。
info = {
(11,22):123
}
# 错误
info = {
(11,[11,22,],22):"alex"
}
字典的值可以是任意类型。
info = {
"k1":{12,3,5},
"k2":{"xx":"x1"}
}
字典的键和集合的元素在遇到 布尔值 和 1、0 时,需注意重复的情况。
元组的元素不可以被替换。
dic = {
'name':'汪峰',
'age':48,
'wife':[ {'name':'国际章','age':38},{'name':'李杰','age':48} ],
'children':['第一个娃','第二个娃']
}
"""
1. 获取汪峰的妻子名字
d1 = dic['wife'][0]['name']
print(d1)
2. 获取汪峰的孩子们
d2 = dic['children']
print(d2)
3. 获取汪峰的第一个孩子
d3 = dic['children'][0]
print(d3)
4. 汪峰的媳妇姓名变更为 章子怡
dic['wife'][0]['name] = "章子怡"
print(dic)
5. 汪峰再娶一任妻子
dic['wife'].append( {"name":"铁锤","age":19} )
print(dic)
6. 给汪峰添加一个爱好:吹牛逼
dic['hobby'] = "吹牛逼"
print(dic)
7. 删除汪峰的年龄
del dic['age']
或
dic.pop('age')
print(dic)
"""
v1 = 3.14
v2 = 9.99
v1 = 3.4
print(int(v1)) # 3
v1 = 3.1415926
print(round(v1, 3)) # 3.142
浮点型的坑
import decimal
v1 = decimal.Decimal("0.1")
v2 = decimal.Decimal("0.2")
v3 = v1 + v2
print(v3) # 0.3