《黑马》python笔记~二
前言
一、配套视频
https://www.bilibili.com/video/BV1ex411x7Em?from=search&seid=13312287313219257984
二、python基础初级
https://blog.csdn.net/weixin_51585624/article/details/116195258
三、python基础中级
四、python基础高级
https://blog.csdn.net/weixin_51585624/article/details/116204361
为方便大家学习,在此发布python基础入门部分配套讲义,原作者为黑马程序员, 前100节为Linux基础,所以我从100集开始记录,持续更新…
目录
python基础中级(列表、元组、字典、字符串)
01、列表
# list 在c++中被称为数组
name_list = ["张三", "李四", "王五", "李四"]
print(name_list)
# len 统计列表中元素的总数 函数
long = len(name_list)
print("列表中包含%d个元素" % long)
# count 统计出现的次数 方法
counts = name_list.count("李四")
print("李四出现%d次" % counts)
# 取值
print(name_list[0])
# 取索引
print(name_list.index("李四"))
# 修改
name_list[2] = "wangwu"
print(name_list, "\n\n")
# 增加
name_list.append("王小二") # 向列表的末尾追加数据
print(name_list)
name_list.insert(1, "小美美") # 在索引为1的位置增加
print(name_list)
temp_list = ["孙悟空", "猪二哥", "沙师弟"]
name_list.extend(temp_list) # 向列表的末尾追加列表数据
print(name_list, "\n")
# 删除
name_list.remove("李四") # 删除指定的数据 只删除了第一个李四
print(name_list)
name_list.pop(0) # 指定要删除的索引
print(name_list)
del name_list[0] # 指定要删除的索引(从内存中删除)
print(name_list)
name_list.clear() # 删除列表所有数据
print(name_list)
控制台结果
['张三', '李四', '王五', '李四']
列表中包含4个元素
李四出现2次
张三
1
['张三', '李四', 'wangwu', '李四']
['张三', '李四', 'wangwu', '李四', '王小二']
['张三', '小美美', '李四', 'wangwu', '李四', '王小二']
['张三', '小美美', '李四', 'wangwu', '李四', '王小二', '孙悟空', '猪二哥', '沙师弟']
['张三', '小美美', 'wangwu', '李四', '王小二', '孙悟空', '猪二哥', '沙师弟']
['小美美', 'wangwu', '李四', '王小二', '孙悟空', '猪二哥', '沙师弟']
['wangwu', '李四', '王小二', '孙悟空', '猪二哥', '沙师弟']
[]
Process finished with exit code 0
02、列表排序
name_list = ["张三", "李四", "王五", "李四"]
num_list = [12, 34, 2, 43, 10, 3]
# 逆序
name_list.reverse()
num_list.reverse()
print(name_list)
print(num_list, "\n")
# 升序
name_list.sort()
num_list.sort()
# 降序
name_list.sort(reverse=True)
num_list.sort(reverse=True)
print(name_list)
print(num_list)
控制台结果
['李四', '王五', '李四', '张三']
[3, 10, 43, 2, 34, 12]
['王五', '李四', '李四', '张三']
[43, 34, 12, 10, 3, 2]
Process finished with exit code 0
03、列表for遍历
name_list = ["张三", "李四", "王五", "王小二"]
for my_name in name_list:
print("我的名字叫%s" % my_name)
控制台结果
我的名字叫张三
我的名字叫李四
我的名字叫王五
我的名字叫王小二
Process finished with exit code 0
04、元组
# 元组与列表相似,不同之处在于元组的元素不能修改,元组可以保存不同类型的数据
infor = (120, "张三", 1.323)
# 当只包含一个元素的元组,需要添加逗号
infors = (120,)
print(type(infor))
# 元组只有两个方法
# count index
# 取值
print(infor[0])
# 取索引
print(infor.index("张三"))
# 统计
print(infor.count("张三")) # 统计出现的次数
控制台结果
<class 'tuple'>
120
1
1
Process finished with exit code 0
05、元组的遍历
infor = ("张三", 18, 1.78)
for my in infor:
print(my)
# 格式化字符串后面的()本质上就是元组
print("%s的年龄是%d身高是%f" % infor)
控制台结果
张三
18
1.78
张三的年龄是18身高是1.780000
Process finished with exit code 0
06、列表与元组的互换
# 列表转元组
num_list = [1, 234, 4545, 65, 2]
num_tuple = tuple(num_list)
print(type(num_tuple))
print(num_tuple)
# 元组转换列表
num_lists = list(num_tuple)
print(type(num_lists))
print(num_lists)
控制台结果
<class 'tuple'>
(1, 234, 4545, 65, 2)
<class 'list'>
[1, 234, 4545, 65, 2]
Process finished with exit code 0
07、字典
# 列表 是存储 有序的对象集合
# 字典 是存储 无序的对象集合
xiaoming = {"name": "小明",
"age": "18",
"gender": "True",
"height": "1.75",
"weight": "75.5"}
print(xiaoming)
控制台结果
{'name': '小明', 'age': '18', 'gender': 'True', 'height': '1.75', 'weight': '75.5'}
Process finished with exit code 0
08、字典的基本使用
xiaoming_dict = {"name": "小明"}
# 取值
print(xiaoming_dict["name"])
# 增加/修改
xiaoming_dict["age"] = 18
xiaoming_dict["name"] = "小小明"
print(xiaoming_dict)
# 删除
xiaoming_dict.pop("age")
print(xiaoming_dict)
控制台结果
小明
{'name': '小小明', 'age': 18}
{'name': '小小明'}
Process finished with exit code 0
09、字典的其他操作
xiaoming_dict = {"name": "小明",
"age": 18}
# 统计键值对数量
print(len(xiaoming_dict))
# 合并字典
temp_dict = {"height": 1.75,
"age": 20}
# 注意:如果被合并的字典中包含已经存在的键值对,会覆盖原有的键值对
xiaoming_dict.update(temp_dict)
print(xiaoming_dict)
# 清空字典
xiaoming_dict.clear()
print(xiaoming_dict)
控制台结果
2
{'name': '小明', 'age': 20, 'height': 1.75}
{}
Process finished with exit code 0
10、字典的for遍历
xiaoming_dict = {"name": "小明",
"qq": "2323234",
"phone": "10086"}
# 遍历字典
# 变量K是每一次循环中,获取到的键值对的KEY
for k in xiaoming_dict:
print("%s-%s" % (k, xiaoming_dict[k]))
控制台结果
name-小明
qq-2323234
phone-10086
Process finished with exit code 0
11、字典放入列表
car_list = [
{"name": "张三"},
{"qq", "21323"},
{"phone": "32323231211"},
{"name":"李四",
"qq":"123234"}
]
for card in car_list:
print(card)
控制台结果
{'name': '张三'}
{'21323', 'qq'}
{'phone': '32323231211'}
{'name': '李四', 'qq': '123234'}
Process finished with exit code 0
12、字符串
str1 = "我的外号是'大西瓜'"
str2 = '我的外号是"大西瓜"'
print(str1)
print(str2)
print(str1[3]) # 取值
for char in str2:
print(char)
控制台结果
我的外号是'大西瓜'
我的外号是"大西瓜"
号
我
的
外
号
是
"
大
西
瓜
"
Process finished with exit code 0
13、字符串的常用操作
hello_str = " hello hello"
print(len(hello_str)) # 统计字符串长度
print(hello_str.count("l")) # 统计出现次数
# 某字符串出现的位置
print(hello_str.index("e")) # 也可以用hello_str.find
# 替换,不会修改原有字符串内容
a = hello_str.replace("hello", "python")
print(a)
print(hello_str)
# 使用strip方法去除字符串中的左右两边的空白字符
print(hello_str.strip())
控制台结果
13
4
3
python python
hello hello
hello hello
Process finished with exit code 0
14、字符串文本对齐
poem=["灯鹳雀楼",
"王之涣",
"白日依山尽",
"黄河入海流",
"欲穷千里目",
"更上一层楼"]
print(poem)
for poem_str in poem:
print(poem_str.center(20)) # 文本中心对齐,靠左边20
控制台结果
['灯鹳雀楼', '王之涣', '白日依山尽', '黄河入海流', '欲穷千里目', '更上一层楼']
灯鹳雀楼
王之涣
白日依山尽
黄河入海流
欲穷千里目
更上一层楼
Process finished with exit code 0
15、字符串的拆分和连接
poem_str = "登鹳雀楼\t王之涣\t白日依山尽\t\n黄河入海流 \t\t欲穷千里目\n更上一层楼"
print(poem_str)
# 拆分字符串,获得字符串列表
poem_list = poem_str.split()
print(poem_list)
# 合并字符串,用空格与列表各元素拼接
result = " ".join(poem_list)
print(result)
控制台结果
登鹳雀楼 王之涣 白日依山尽
黄河入海流 欲穷千里目
更上一层楼
['登鹳雀楼', '王之涣', '白日依山尽', '黄河入海流', '欲穷千里目', '更上一层楼']
登鹳雀楼 王之涣 白日依山尽 黄河入海流 欲穷千里目 更上一层楼
Process finished with exit code 0
16、字符串切片
num_str = "0123456789"
print(num_str[2:5])
print(num_str[2:])
print(num_str[:-2])
print(num_str[:])
print(num_str[::2]) # 步长为2
# 字符串的逆序
print(num_str[::-1])
控制台结果
234
23456789
01234567
0123456789
02468
9876543210
Process finished with exit code 0
17、公共方法
# 公共方法 列表 元组 字典 字符串 的公共方法
"""""
len() 获取长度
del() 删除索引所对的数据
max() 如果是字典比较,比较的是KEY的大小
min()
"""""
print("a" in "abc") # 字符串
print(1 in [1, 2, 3]) # 列表
print("a" in {"a": "laowang"}) # 字典,只能判断字典的Key
控制台结果
True
True
True
Process finished with exit code 0
18、for循环
""""
for 变量 in 集合:
循环体代码
else
for全部循环结束后,就会执行else代码,
除非for循环中使用了break中途退出了循环,则不执行else
"""
for num in [1, 2, 3]:
print(num)
if num == 2:
break
else:
print("会执行吗?")
print("循环结束")
控制台结果
1
2
循环结束
Process finished with exit code 0
19、遍历字列表中的字典
students = [
{"name": "阿土"},
{"name": "小美"},
{"name": "小王"}
]
find_name = "小土"
for stu_dict in students:
print(stu_dict)
if stu_dict["name"] == find_name:
print("找到了 %s" % find_name)
break
else:
print("抱歉未找到 %s" % find_name)
print("循环结束")
控制台结果
{'name': '阿土'}
{'name': '小美'}
{'name': '小王'}
抱歉未找到 小土
循环结束
Process finished with exit code 0
20、变量
a = 1
b = a
print(id(a)) # 打印内存地址
print(id(b))
a = 2
print(id(a))
# 可变类型数据 列表、字典
# 可变类型的数据变化,是通过方法来实现的
# 如果给一个可变类型的变量,赋值了一个新的数据,引用会修改
# a相当于贴纸,一开始贴在(指针指向)1处,后面贴在(指针指向)了2处
控制台结果
140731019927952
140731019927952
140731019927984
Process finished with exit code 0
21、字典所存储的数据类型
d = {}
d["name"] = "小明" # 存放字符串(不可变数据)
print(d)
d[1] = "整数" # 存放整数(不可变数据)
print(d)
d[(1,)] = "元组" # 存放元组(不可变数据)
print(d)
# 字典中 不可以放列表、字典(可变类型数据)
# 列表中可以放字典,字典可放元组与字符串
# 键值对的KEY必须是不可变类型数据
# 键值对的value可以是任意类型的数据
控制台结果
{'name': '小明'}
{'name': '小明', 1: '整数'}
{'name': '小明', 1: '整数', (1,): '元组'}
Process finished with exit code 0
22、局部变量
def demo(a): # 单独传整数1,a贴纸未动,一直贴在(指向)整数1处
a = a + 1 # 局部变量
print(a) # a指向整数2
print(id(a))
return a # 返回a的地址给b,a和b都指向了整数2
a = 1 # 全局变量
b = demo(a) # 传值不传址 ,a依旧(贴在)指向整数1
print(b)
print(id(b))
print(a)
print(id(a))
控制台结果
2
140734139965872
2
140734139965872
1
140734139965840
Process finished with exit code 0
23、全局变量global
def demo(c):
global a # 传址 告诉解释器后面的变量是一个全局变量,把a贴纸(指针指向)拿了过来
a = c + 1 # a贴纸 指向了整数2
print(a)
print(id(a))
return a # 返回a的地址给b
a = 1 # 全局变量
b = demo(a) # 传值不传址
print(b)
print(id(b))
print(a)
print(id(a))
控制台结果
2
140734139965872
2
140734139965872
2
140734139965872
Process finished with exit code 0
24、函数的返回值
'''
无参无返
无参有返
有参有返
有参无返
'''
def measure(): # 无参有返
print("测量开始。。。")
temp = 39
wetness = 50
print("测量结束。。。")
return (temp, wetness) # 返回元组,小括号可以省略
result = measure()
print(result)
# 如果函数返回的类型是元组,同时希望单独的处理元组中的元素
# 可以使用多个变量,一次性接收函数的返回结果,变量的个数因该和元组中元素的个数保持一致
gl_temp, gl_wetness = measure()
print(gl_temp)
print(gl_wetness)
控制台结果
测量开始。。。
测量结束。。。
(39, 50)
测量开始。。。
测量结束。。。
39
50
Process finished with exit code 0
25、交换2个变量的值
a = 6
b = 100
a, b = b, a # Python专有的 元组元素互换 等号右边是一个元组,左边是接受的变量个数
print(a)
print(b)
控制台结果
100
6
Process finished with exit code 0
26、函数内通过方法修改全局变量
def demo(num_list):
print("函数内部的代码")
# 使用方法修改列表指针的指向,原本num_list指向[1, 2, 3],通过append方法后,改变了指向,指向了[1, 2, 3,9]
num_list.append(9) # 方法(列表、字典)指定地址(传址), 列表的+=也属于方法因为其本质是内部调用extend方法
num_list += [10, 11] # 通过+=方法后,改变了指向,指向了[1, 2, 3,9,10,11]
print(num_list)
print(id(num_list))
print("函数执行完成")
gl_list = [1, 2, 3]
demo(gl_list)
print(gl_list)
print(id(gl_list))
# 本次程序运行中,[1, 2, 3]的所占内存一直未被释放,直到整个代码运行完才自动释放
控制台结果
函数内部的代码
[1, 2, 3, 9, 10, 11]
1986400113096
函数执行完成
[1, 2, 3, 9, 10, 11]
1986400113096
Process finished with exit code 0
27、缺省参数
gl_list = [6, 3, 9]
gl_list.sort(reverse=True) # 默认是升序排序,Ture是降序排序
print(gl_list)
# 缺省参数,需要使用 最常用的值 作为默认值
# 如果一个参数的值不能确定,则不应该设置默认值,具体的数值在调用函数时,由外界传递
def print_info(name, gender=True): # 默认gender传了一个Ture过来
"""
:param name: 班上同学的姓名
:param gender: Ture 男生 False 女生
"""
gender_text = "男生"
if not gender: # not取反 假如gender没有传值进来,取反,则为真,执行if语句
gender_text = "女生"
print("%s是%s" % (name, gender_text))
print_info("小明")
print_info("小王")
print_info("小美", False) # 传入假
控制台结果
[9, 6, 3]
小明是男生
小王是男生
小美是女生
Process finished with exit code 0
28、多值参数装包
# 函数中参数传递的个数 有时候是不固定的
# 把离散数据装进元组或字典中
"""
*args-----存放元组参数,前面有一个*
**kwarges----存放字典参数,前面有两个*
"""
def demo(num, *nums, **person):
print(num)
print(nums)
print(person)
demo(1)
print("*" * 50)
demo(1, 2, 3, 4, 5, name="小明", age=18, weight=180)
控制台结果
1
()
{}
**************************************************
1
(2, 3, 4, 5)
{'name': '小明', 'age': 18, 'weight': 180}
Process finished with exit code 0
29、多值参数求和
def sun_numbers(*args):
num = 0
print(args)
for n in args:
num += n
return num
result = sun_numbers(1, 2, 3, 4, 5)
print(result)
控制台结果
(1, 2, 3, 4, 5)
15
Process finished with exit code 0
30、多值函数拆包
def demo(*args, **kwargs):
print(args)
print(*args) # 拆开元组获得元素
print(kwargs)
print(*kwargs) # 拆开字典,获得key
# 元组变量/字典变量
gl_nums = (1, 2, 3)
gl_dict = {"name": "小明", "age": 18}
demo(*gl_nums, **gl_dict) # 传递元组、字典
# 等同于:
# demo(12, 3, name="小明", age=18)
控制台结果
(1, 2, 3)
1 2 3
{'name': '小明', 'age': 18}
name age
Process finished with exit code 0
31、递归
# 函数内部,自己调用自己,但要添加参数判断,准备递归的出口,不然会死循环
def sum_number(num):
print(num)
if num == 1:
return
sum_number(num - 1) # 调用自己
sum_number(3)
控制台结果
3
2
1
Process finished with exit code 0