Python基础教程「python第一课」
day06回顾:
列表 list
序列 sequence:
字符串 str, 列表 list, 元组 tuple, bytes, bytearray
in / not in 运算符
索引 index
索引赋值,替换原来的元素
切片 slice
切片赋值, 实现添加,删除,修改
del 语句
用于删除列表中的元素
L1 = [1, 2, [3.1, 3.2]]
del L1[0]
del L1[2][1]
深拷贝 和 浅拷贝
函数:
len
max
min
sum 求和(只能对数字求和)
any 任何一个为真,结果为真
all 所有为真,结果才为真
list 中常用的方法:
...
>>> help(list)
day07笔记:
列表推导式 (list comprehension)
作用:
用简易方法生成列表
语法
[表达式 for 变量 in 可迭代对象]
或
[表达式 for 变量 in 可迭代对象 if 真值表达式]
说明:
1. 先用可迭代对象生成一个对象,同时用变量绑定这个对象
2. 调用表达式, 把当前的表达式结果以追加方式存放于列表中
3. 重复1步骤,直到可迭代对象不再提供数据为止
4. for in 表达式的if 子句可以省略,省略后将对所有对象进行处理
5. 如果 if真值表达式的布尔值为False,则可迭代对象生成的数据将被丢弃
示例:
见: list_comprehesion.py
# 生成一个列表:
[1, 2, 3, 4, 5, 6, ..... , 10000]
L = [x for x in range(1, 10001)] # 正确做法1
L = [x 1 for x in range(10000)] # 正确做法2
练习:
生成一个数值为1~9的平方的列表:
L = [1, 4, 9, 16, ...., 81]
用列表推导式实现
L = [x ** 2 for x in range(1, 10)]
示例:
# 生成奇数的列表
L = [x for x in range(100) if x % 2 == 1]
练习:
生成一个列表:x的平方 1的列表,跳过结果能被5整除的数,
x<= 100
L = [2, 5, 10, 17, ....]
L = [2, 17, ....]
L = [x ** 2 1 for x in range(1, 101)
if (x ** 2 1) % 5]
L = [x ** 2 1 for x in range(1, 101)
if (x ** 2 1) % 5 != 0]
列表推导式的嵌套
语法:
[表达式
for 变量1 in 可迭代对象1 if 真值表达式1
for 变量2 in 可迭代对象2 if 真值表达式2
...
]
例如:
s = "ABC"
s2 = "123"
生成如下列表:
["A1", "A2", "A3", "B1", "B2", ....]
L = [x y for x in s for y in s2]
练习:
1. 用列表推导试生成如下列表:
[1, 4, 7, 10, ....., 100]
# 做法1
list(range(1, 101, 3))
# 做法2
[x for x in range(1, 101, 3)]
# 做法3
[x for x in range(1, 101) if x % 3 == 1]
2. 思考题:
试想能否用列表推导式生成如下列表:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[ [x, x, x] for x in range(1, 8, 3)]
[ [y for y in range(x, x 3)]
for x in range(1, 8, 3)]
元组 (tuple)
元组是不可以改变的序列。同list一样,元组可以存放任意类型的值
表示方法:
用小括号() 括起来,单个元素括起来后加逗号(,)来区分表达式分组还是元组
创建空元组
t = () # t绑定空元组
创建非空元组:
t = 200,
t = (20,)
t = (1, 2, 3)
t = 100, 200, 300
t = (1, "two", 3, "four")
元组的构造(创建)函数
tuple() 生成一个空元组,等同于 ()
tuple(iterable) 用可迭代对象生成一个元组
示例:
t = tuple() # 空元组
t = tuple("ABC") # t = ("A", "B", "C")
t = tuple([1,2,3,4]) # t = (1,2,3,4)
问题:
请问哪儿些变量绑定的是元组
t = 20
t1 = (20)
t2 = (1 20)
t3 = (30, ) # t3 是元组
x, y, z = 100, 200, 300
x, y, z = (100, 200, 300)
x, y, z = [100, 200, 300]
x, y, z = [100, 200, (300, 400)]
x, y, z = "ABC"
元组的算术运算:
= * *=
示例:
t = (1,2,3) (4,5,6) # t = (1,2,3,4,5,6)
t = (7,)
t = 8,
* *= 略过
元组的比较运算:
< <= > >= == !=
示例:
(1, 2, 3) != (4,5,6) # True
(1,2,3) < (1,4,3) # True
(2, 3, 1) > (1, 2, 3) # True
说明:
比较规则等同于字符串和列表的比较规则
in / not in 运算符
等同于列表和字符串中的in/not in 运算符
用来判断一个值是否存在于元组中
索引 index
用法等同于字符串的索引
元组不能索引赋值
示例:
t = (1, 2, "3.0")
print(t[0])
print(t[2])
t[2] = 3.0 # 错的!!!!
切片 slice
用法等同于字符的切片
元组不能切片赋值
* 元组的切片返回一个新的元组
示例:
x = (1,2,3,4,5,6,7,8)
y = x[::2] # y = (1,3,5,7)
元组的方法:
T.index() 返回对应元素的下标,当value不存在时,触发ValueError的错误
T.count(x) 返回列表中元素的个数
能用于序列的函数总结:
len(x) 返回序列长度
max(x) 返回序列中最大值的元素
min(x) 返回.......小 .....
sum(x) 返回序列中所有元素的和
any(x) 真值测试...
all(x) 真值测试...
str(obj) 将对象obj转为字符串
list(iterable) 用可迭代对象生成列表
tuple(iterable) .............元组
思考:
元组里能否放列表
t = (1, 2, [3.1, 3.2]) # 可以吗?
能否把3.1 改为 3.14呢?
为什么?
字典 dict
什么是字典:
1. 字典是一种可变的容器,可以存储任意类型的数据
2. 字典中的每个数据都是用"键"(key) 进行索引的,而不象序列,可以用整数下标进行索引
3. 字典的数据没有先后关系,字典的存储是无序的
4. 字典中的数据是以键-值(key-value)对 的形式进行存储的
5. 字典的键不能重复,且只能用不可变类型作为字典的键
字典的字面值表示方法:
以大括号,花括号{} 括起来, 以冒号(:) 分隔键-值对, 各键值对之间用逗号分隔开
创建空字典:
d = {} # d绑定空字典
创建非空字典:
d = {"name": "weimingze", "age": 35}
d = {True: "真值", False: "假值"}
d = {"class1": ["老魏", "张某某", "李某某"]}
d = {(2008, 8, 8): "北京奥运会纪念日"}
d = {"a": 1, "b": 2, "a": 1.1}
字典的值可以为任意类型:
bool, str, int, float, complex, tuple, list, dict ,以及后面要学到的 集合,函数,类对象....
示例:
d = {"a": tuple(range(10))}
dict 的构造(创建)函数
dict() 生成一个空的字典,等同于 {}
dict(iterable) 用可迭代对象初始化一个字典
dict(**kwargs) 关键字参数形式生成一个字典
示例:
d = dict()
d = dict([("name", "weimingze"), ("age", 35)])
# 关键字传参生成一个字典
d = dict(name="weimingze", age=35)
L = [(1, 2), (3, 4), "AB", [5, 6]]
d = dict(L) # {1: 2, 3: 4, 5: 6, "A": "B"}
可变类型(不能充当字典的键):
列表,字典,集合set,字节数组(bytearray,后面会讲)
字典的访问:
字典的键索引
用[]访问字典内的成员
语法:
字典[键]
示例:
d = {"name": "tarena", "age": 20}
print("姓名:", d["name"], "年龄:", d["age"])
字典的特点:
添加,删除,查找速度快
添加和修改元素
字典[键] = 值
示例:
d = {}
d["name"] = "tarena" # 创建新的键值对
d["age"] = 20 # 创建新的键值对
d["age"] = 21 # 修改age键所对应的值
说明:
字典的键索引赋值时:
1. 键不存在,创建键,并绑定键对应的值
2. 键存在,修改键绑定的值
del 语句
可以用来删除字典的键-值对
语法:
del 字典[键]
示例:
d = {"name": "tarena", "age": 20}
del d["age"]
in /not in运算符:
1. 可以用in运算符来判断一个键是否存在于字典中,如果存在则返回True, 否则返回False
2. not in 与 in 的返回值相反
示例:
d = {"name": "tarena", "age": 20}
"name" in d # 返回True
20 in d # 返回False
字典的迭代访问:
字典是可迭代对象, 字典只能对键进行迭代
示例:
d = {"name": "tarena", "age": 20}
for x in d:
print(x)
可以用于字典的内建(built-in)函数:
len(x) 返回键值对的个数
max(x) 返回键的最大值
min(x) 返回键的最小值
sum(x) 返回键的和
any(x) 真值测试,只对键测试
all(x) 真值测试,对键测试
练习:
输入一段字符串, 打印出这个字符串中出现过的字符及出现过的次数,如:
输入:abcdabcaba
a : 4次
b : 3次
d : 1次
c : 2次
注:不要求打印的顺序
字典的方法(method)
D代表字典对象
D.clear() 清空字典
D.pop(key) 移除键,同时返回此键所对应的值的引用关系
D.copy() 返回字典D的副本,只复制一层(浅拷贝)
D.update(D2)将字典D2合并在D中,如果键相同,则此键的值取D2的值作为新值
D.get(key, default) 返回键key所对应的值,如果没有此键,则返回default
D.keys() 返回可迭代的dict_keys集合对象
D.values() 返回可迭代对dict_values值对象
D.items() 返回可迭代的dict_items对象
示例:
d = {1: "one", 2: "two", 3: "three"}
for x in d:
print(x) # 键值对元组
字典推导式 dict comprehesion
作用:
用可迭代对象生成一个新的字典
语法:
{键表达式 : 值表达式
for 变量列表 in 可迭代对象 [if 真值表达式]}
注:
[] 的内容代表可省略
示例:
# 生成一个字典, 键为数值(1~10), 值为数字的平方
d = {x : x**2 for x in range(1, 11)}
L = ["tarena", "xiaozhang", "xiaowei"]
# 字符串作为键,字符串长度作为值:
d = {x : len(x) for x in L}
字典推导式嵌套
嵌套方式与列表推导式相同
语法:
{键表达式 : 值表达式
for 变量列表 in 可迭代对象 [if 真值表达式]
for 变量列表 in 可迭代对象 [if 真值表达式]
}
练习:
1. 写一个程序,先输入一些单词和解释,将单词作为键,将解释作为值,将这此数据输入字典中. 以输入单词为空结束输入.
然后循环提示请输入要查找的词:
如果不存在于字典中提示没找到,如果存在,打印出解释
2. 输入任意5个学生的 姓名,年龄,成绩,每个学生的信息存入字典,然后把学生信息的字典放入列表中.
每个学生的信息需要手动输入
内部存储格式如下:
[{"name":"tarena", "age": 20, "score": 99}, {"name":"xiaozhang", "age": 23, "score": 100}, .... ]
1) 打印所有学生信息如下:
------------- ------------- -----------
| 姓 名 | 年 龄 | 成绩 |
------------- ------------- -----------
| tarena | 20 | 99 |
| xiaozhang | 23 | 100 |
| name2 | 28 | 70 |
| .... | ... | ... |
------------- ------------- -----------
2) 输入学生的分数线,把高于这个分数线的学生信息打印出来
如输入:90 打印如下
------------- ------------- -----------
| 姓 名 | 年 龄 | 成绩 |
------------- ------------- -----------
| tarena | 20 | 99 |
| xiaozhang | 23 | 100 |
------------- ------------- -----------
相关文章
- 曾经很红,但是现在过气的明星「盘点那些过气的明星」
- 奔腾b70五星安全「2021款奔腾b70怎么样」
- 昔日鞋王百丽重返资本市场「高瓴资本投资百丽鞋业」
- 沉默的证人最终票房「证人票房」
- 充电宝代加工厂「共享充电宝代工厂」
- 港剧走入新世纪「tvb视后2020」
- 邵氏出品必属精品说电影「邵氏经典动作电影」
- 今日玖龙废纸价格最新行情「今日玖龙纸业废纸价格」
- 外资投行面试「去投行需要什么专业」
- 小镇青年创业做起跨境电商的作用「陆港电商小镇招聘跨境电商」
- 搜索产品经理招聘「智联招聘人才测评」
- 中国工商银行春招笔试「2019国际国内形势」
- 亚马逊运营没有提成「深圳亚马逊提成毛利3个点」
- 马英九登岛「阿根廷马岛战争为什么打不过英国」
- 电商部非常受欢迎的薪酬提成方案「电商薪酬方案」
- 三年工作经验面试阿里p7「阿里巴巴投资了字节跳动吗」
- 跨境电商利润怎么算「跨境电商利润率计算」
- 亚马逊的运营过程中有哪些营销策略运用了大数据「如何制定全年销售目标」