元组
"""
目录:
1.创建元组
2.元组的拼接
3.元组的解压赋值
4.元组的切片
5.元组的元素的索引
6.元组的嵌套
7.统计某个元素的个数
"""
"""创建元组(元组不可变)"""
tuple_0 = (1,)
tuple_1 = 1, 2, 3, "apple", "red"
tuple_2 = (1, 2, 3, "banana", "blue")
print(type(tuple_1), type(tuple_2))
"""元组的拼接"""
tuple_new = tuple_1 + tuple_2
"""元组的解压赋值"""
tuple_3 = (1, 2, 3)
a, b, c = tuple_3
"""元组的切片(并非修改其内容)"""
print(tuple_3[::-1])
"""知道‘元组的元素’查看其‘索引’"""
print(tuple_1.index("apple"))
"""元组的嵌套"""
tuple_4 = ((1, 8, 3), (5, 1))
"""统计某个元素的个数"""
tuple_5 = (5, 6, 1, 3, 1, 2, 1, 8)
res = tuple_5.count(1)
print("有%d个数字‘1’" % res)
列表
"""
目录:
1.创建列表
2.列表的拼接
3.列表的解压赋值
4.列表的切片
5.列表的元素的索引
6.列表的嵌套
7.统计某个元素的个数
8.列表的元素添加
9.列表的元素删除
10.替换元素
11.元素排序
12.列表推导式
13.拷贝
"""
"""创建列表"""
list_0 = []
list_1 = [1]
list_2 = [2, 3, 4, 5]
"""列表的拼接"""
list_new_1 = list_1 + list_2
list_new_2 = list_1 * 3
"""列表的解压赋值"""
list_3 = [1, 2, 3]
a, b, c = list_3
"""列表的切片"""
print(list_3[0:3:2])
print(list_3[::])
print(list_3[::-1])
"""知道‘列表的元素’查看其‘索引’"""
print(list_3.index(1))
"""列表的嵌套"""
list_3 = [[1, 2], [1, 2, 3, 4], [0]]
"""列表推导式"""
list_4 = [i for i in range(9) if i < 5]
list_5 = [i for i in "hello_world"]
"""列表的元素添加"""
list_6 = [66, 77, 88, 99]
str_1 = "每次只能添加一个元素"
list_6.append(str_1)
list_new_3 = [211, "extend是并入一个列表", 985]
list_6.extend(list_new_3)
"""列表的元素删除"""
str_2 = "remove() 函数用于移除列表中某个值的第一个匹配项,没有返回值"
list_6.remove(str_2)
str_3 = "pop() 函数用于移除列表中的一个元素(默认最后一个元素)并且返回该元素的值"
list_6.pop()
list_6.clear()
"""替换元素"""
list_6[0] = 233
list_6[:3:] = 1, 2, 3
"""元素排序"""
list_7 = [5, 9, 1, 7, 3]
list_7.sort()
print(list_7)
list_7.reverse()
print(list_7)
"""统计某个元素的个数"""
res = list_7.count(1)
"""拷贝"""
list_8 = [[1, 2], 3, 4, 5]
print("原来的>>>", list_8)
res_1 = list_8.copy()
res_1[3] = 55
print(res_1)
print(list_8)
list_8 = [[1, 2], 3, 4, 5]
print("原来的>>>", list_8)
res_2 = list_8.copy()
res_2[0][0] = 22
print(res_2)
print(list_8)
import copy
res_3 = copy.deepcopy(list_8)
字典
"""
目录:
1.创建字典
2.字典的get函数
3.字典的拼接
4.字典的嵌套
5.统计字典有多少个‘键值对’
6.字典推导式
7.字典元素的添加
8.字典元素的修改
9.字典元素的删除
10.拷贝
11.字典的 items()函数
"""
"""创建字典"""
dict_0 = {}
dict_1 = {"key": 150}
dict_2 = {
"name": "小明",
"age": 18,
"hobby": "打篮球"
}
"""字典的get函数"""
res = dict_2.get("name", "查无此人")
"""字典的拼接"""
dict_3 = {**dict_1, **dict_2}
print(dict_3)
"""字典的嵌套"""
dict_4 = {
"叶寻": {"age": 20, "height": 180},
"小明": {"age": 15, "height": 165}
}
"""统计字典有多少个‘键值对’"""
print(len(dict_3))
print(len(dict_4))
"""字典推导式"""
dict_5 = {i: i ** 2 for i in range(5)}
"""字典元素的添加(直接添加即可)"""
dict_6 = {}
dict_6["age"] = 15
dict_6["name"] = 8
"""字典元素的修改"""
dict_7 = {"age": 18}
dict_7["age"] = 50
"""字典元素的删除"""
del dict_7["age"]
dict_7.clear()
del dict_7
"""拷贝"""
dict_8 = {"color": {"red": "红色", "yellow": "黄色"}, "weight": 50}
print("原来的>>>", dict_8)
res_1 = dict_8.copy()
res_1["weight"] = 999
print(res_1)
print(dict_8)
dict_8 = {"color": {"red": "红色", "yellow": "黄色"}, "weight": 50}
print("原来的>>>", dict_8)
res_2 = dict_8.copy()
res_2["color"]["red"] = "玫瑰红"
print(res_2)
print(dict_8)
import copy
res_3 = copy.deepcopy(dict_8)
"""字典的 items()函数"""
d = {"red": 1, "blue": 2, "green": 3}
for i, v in d.items():
print(i, v)
集合
"""
目录:
1.创建集合
2.去重
3.成员操作符(in_or_not_int)
4.枚举(列举)
5.增、删
6.交集
7.并集
"""
""" 创建集合"""
set_0_0 = set()
set_0_1 = set(())
set_0_2 = set([])
set_0_3 = set({})
set_1 = {4, 5, 6}
list_temp = [55, 66, 77]
set_2 = set(list_temp)
"""去重"""
list_new = [1, 1, 1, 1, 1, 2, 3, 4, 5]
set_3 = set(list_new)
"""成员操作符(in_or_not_int)"""
print(5 in set_3)
"""枚举(列举)"""
s = {1, 2, 3, 4, 5}
for i, v in enumerate(s, start=0):
print('index: %s,value: %s' % (i, v))
"""增、删"""
s.add(10)
s.update([5, 2, 3, 6])
s.pop()
s.remove(5)
"""交集"""
s1 = {1, 2, 99, 88}
s2 = {1, 2, 55, 66}
s3 = {1, 2, 10, 20}
print(s1.intersection(s2, s3))
"""并集"""
print(s1.union(s2, s3))
"""差集"""
print(s1 - s2)
"""对称差集"""
print(s1 ^ s2)
"""父子集"""
print(s1 > s2)
字符串
"""
目录:
1.创建字符串
2.访问字符串中的值
3.字符串拼接
4.转义字符
5.成员运算符
6.字符串的切片
7.字符串常用函数
"""
"""创建字符串"""
name = "Xiao_Ming"
"""访问字符串中的值"""
str_1 = "abcdfg"
print(str_1[0])
"""字符串拼接"""
str_2 = "i love "
str_3 = "you"
str_4 = str_2 + str_3
"""转义字符"""
"""成员运算符"""
str_5 = "abc"
print("userDate.txt" in str_5)
"""字符串的切片"""
str_6 = "abcdefg"
print(str_6[:5:])
"""
字符串常用函数
1.join()
2.replace()
"""
""" 1.join()函数(返回值是"字符串类型")"""
res_1 = ":".join("快遍历并插入进来")
res_2 = "".join(["我", "是", "一", "个", "数", "组"])
""" 2.replace() """
str_n = "我是他朋友"
print(str_n.replace("他", "你"))
格式化输出
'''
%s 字符串
%c 字符
%d 十进制(整数)
%o 八进制整数
%x 十六进制整数
'''
print("我的年龄为%d" % 28)
print("我是%s,它是%s" % ("小明", "金刚"))
print("你看看它们,一个是%(male)s,一个是%(female)s" % {"female": 1, "male": 2})
a = "你好呀!"
b = "我是XXX"
c = a + b
print(c)
a = '{0:^10}'.format('567')
print(a)
b = '{:02}:{:02}:{:02}'.format(13, 4, 57)
'13:04:57'
print(b)
""" 1.整数的输出 """
""" 2.浮点数输出 """
""" 3.字符串输出 """
'''
\ 续行符
\\ 反斜杆符号
\' 单引号
\" 双引号
\a 响铃
\b 退格(Backspace)
\000 空
\n 换行
\r 回车
\v 纵向制表符
\t 横向制表符
\f 换页
'''
b = '{num:.2f}'.format(num=3.1415926)
print(b)
print('%-8s' % '{}x{}={}'.format(1, 2, 3))
循环语句
""" for循环实例 """
for i in range(1, 10):
for j in range(1, i + 1):
print("%-7s" % "{}x{}={}".format(j, i, j * i), end=" ")
print()
""" while循环实例 """
while True:
height = int(input("请输入楼梯高度>>>"))
symbol = input("请输入符号>>>")
if height <= 0:
continue
i = 0
while i <= height:
print(symbol * i)
i += 1
if input("按Q键退出,否则继续").upper() == 'Q':
break
生成式
"""元组生成式 由于元组不可变 所以不能往元组里面‘添加新的值’ 即不可‘生成’"""
"""列表生成式"""
list_basic = ["神兽金刚", "百变金刚", "雷神风暴"]
list_1 = []
for name in list_basic:
if name.endswith("金刚"):
list_1.append(name)
list_1 = [name for name in list_basic if name.endswith("金刚")]
"""字典生成式"""
list_basic = ["神兽金刚", "百变金刚", "神兽金刚", "金刚雷神风暴"]
dict_1 = {list_basic.index(i): i for i in (list_basic)}
"""集合生成式"""
list_basic = ["神兽金刚", "百变金刚", "金刚雷神风暴", "神兽金刚"]
set_1 = {name for name in list_basic if name.endswith("金刚")}
"""生成器表达式"""
list_basic = ["神兽金刚", "百变金刚", "金刚雷神风暴", "神兽金刚"]
res = (name for name in list_basic)
"""
知识补充:
———————————————————————————————————————————————————————————
1.
Python中生成器能做到迭代器能做的所有事,
而且因为自动创建了__iter__()和next()方法,
生成器显得特别简洁。
而且生成器也是高效的,
使用生成器表达式取代列表解析,同时节省内存。
除了创建和保持程序状态的自动生成,当发生器终结时
还会自动抛出StopIterration异常。
———————————————————————————————————————————————————————————
2.
列表、元组、字典、字符串都是可迭代对象。
数字、布尔值都是不可迭代的。
———————————————————————————————————————————————————————————
3.
什么是迭代器?
迭代器对象要求支持迭代器协议的对象。
在Python中,支持迭代器协议
就是实现对象的__iter__()和next()方法。
其中__iter__()方法返回迭代器对象本身,
next()方法返回容器的下一个元素,在结尾时引发StopIteration异常。
例子:
list = [1,2,3,4] # list是可迭代对象
lterator = iter(list) # 通过iter()方法取得list的迭代器
print(next(lterator)) # 1 通过next()获取下一个位置的值
print(next(lterator)) # 2
print(next(lterator)) # 3
print(next(lterator)) # 4
输出:
1
2
3
4
———————————————————————————————————————————————————————————
4.
什么是生成器?
生成器(generator)就是一个函数,
它提供了一种实现迭代器协议的便捷方式。
生成器与普通函数的区别在于它包含 yield 表达式,
并且不需要定义 __iter__()和__next__()。
生成器是一种惰性的序列,
如果我们需要创建一个 0~1000000000 的序列,
这样大的序列创建出来会占用比较多的内存,
生成器就是为了解决这样的问题。
例子:
# 普通序列
g = []
for x in range(5):
g.append(x)
# g ----> [0, 1, 2, 3, 4]
# 生成器
def f():
for x in range(5):
yield x # 返回并记录函数状态
# next
f = f()
>>> next(f) # 每调用一次next,就执行一次yield | 依靠这种需要才生产的工作机制,大大的节省资源
0
>>> next(f)
1
>>> next(f)
2
>>> next(f)
3
>>> next(f)
4
# for next
>>> for x in range(5):
>>> print(next(f))
0
1
2
3
4
———————————————————————————————————————————————————————————
"""
异常处理
"""
try:
子代码块
except (异常类型A, 异常类型B, 异常类型C)
子代码块
except 异常类型2 as 别名
子代码块
except 异常类型3 as bbb # bbb 拿到的是捕获异常所拿到的提示信息
子代码块
except 异常类型4 as eee
子代码块
except Exception as 别名:
它是最后的防线,可以捕捉所有的异常!但它根据需求,可写也可不写
else:
子代码块: 会在
try的子代码块
没有异常的时候执行
finally:
子代码块
无论如何都执行
"""
序列化和反序列化
'''
1 什么是序列化和反序列化?
内存中的数据类型 ---(序列化)---> 特定的格式 ( json格式 或者 pickle格式 )
内存中的数据类型 <---(反序列化)--- 特定的格式 ( json格式 或者 pickle格式 )
2 为何要序列化?
序列化得到的结果 -> 特定的格式内容有两种用途
2.1 可用于储存(如:游戏存档)
2.2 传输给其他平台使用(如:跨平台数据交互)
Python ------------------------Java
列表 -------- 特定格式 --------- 数组
. .
. .
. .
集合(Python特色,无法转换)
3 强调!!!
针对用途1的特定格式:应该用一种专门的格式比较好,pickle只有Python可以识别,但它可以很好的保留Python的特色
针对用提2的特定格式:应该用一种通用的,能被所有语言识别的格式 -> json
4 补充~~~(了解)
l = json.loads('[1, "abc", true, false]') ----- A1
l = json.loads(b'[1, 'abc', True, False]') ----- A2
上面两式子都能成功转换!!【Python版本(2.7~3.4)&(3.6~now)】
注意!Python 3.5 中,A2式子会报错
A1中的内容是json格式,它是str类型
A2中的内容是 bytes类型
'''
''' 1 json的实例 '''
import json
''' 2 pickle的实例 '''
import pickle
res = pickle.dumps({1, 2, 3, 4, 5})
print(res, type(res))
s = pickle.loads(res)
print(s, type(s))
猴子补丁
'''
当使用别人的模块不是很顺利的时候
我们可以在执行文件的入口处加上一个自己的补丁
当我们想要反悔的时候
删掉入口文件中的补丁即可
'''
# 例如:假设当前文件为执行的入口,ujson是比json更强的模块,
# 但是我们已经用json写了很多功能了!!又不想牵一发而动全身
# 这时,我们可以在入口文件(即本文件)加入补丁
import json
import ujson
def monkey_patch_json():
json.__name__ = 'ujson'
json.dumps = ujson.dumps
json.loads = ujson.loads
# 在入口文件中运行
monkey_patch_json()
知识补充
# coding:utf-8
# 交叉赋值
m = 10
n = 20
n, m = m, n
# 解压赋值
# 取前面部分的值
l = [1, 2, 3, 4, 5, 6, 7]
x, y, z, *aaa = l
a, b, c, *_ = l
print(aaa)
print(_)
# 取后面部分的值
ll = [1, 2, 3, 4, 5, 6, 7]
*_, a1, b1, c1 = ll
print(_)
# 百分之78
print("百分率>>> %s %%" % 78)