day05回顾:
-
for 语句
for 变是列表 in 可迭代对象:
语句块1(重复执行多次)
else:
语句块2(在可迭代不再能提供数据时执行)
可迭代对象:
字符串 列表 range(开始,结束,步长) -
continue 语句
while 中
for 中
- 语句嵌套:
if while for .....
如:
if xxx:
while ....:
for xxxx:
if xxxx:
while xxx:
for yyy:
...
if zzz:
....
else:
print(...)
print("hello)
-
列表 list
[]
[1, 2, 3. 3.14, True, …] -
序列,可变的, 容器
构造函数
list()
list(可迭代对象) -
列表的运算:
运算符:
+ += * *=
< <= > >= == !=
in / not in
索引[] / 切片[:] [::]
索引和切片支持赋值操作:
列表[整数列表] = 值
列表[开始索引:结束索引:步长] = 可迭代对象
day06笔记:
列表
-
向列表内添加数据
L[0:0] = [100, 200]
修改数据:
L[1] = 300
L[1:5] = [1,2,3]
删除数据:
L[1:5] = [] -
del 语句
用于删除列表的元素
示例:
del L[2] # 删除单个元素
del L[::2] # 删除切片切出来的部分 -
练习:
已知有列表:
L = [3, 5]
用索引的切片等操作,将原列表的改变为:
L = [1, 2, 3, 4, 5, 6]
将列表反转(先后顺序颠倒),删除最后一个元素后,打印此列表:
print(L) # [6, 5, 4, 3, 2] -
python3中常用于序列的函数:
len(x) 返回序列长度
max(x) 返回序最的最大值元素
min(x) 返回序列的最小值元素
sum(x) 返回序列中所有元素的和(元素必须是数值类型)
any(x) 真值测试,如果序列中其中一个值为真值则返回True
all(x) 真值测试,如果列表中所有值为真值才返回True- 示例:
L = ['One', 2, '三']
print(len(L)) # 3
L = [8, 3, 6, 2]
min(L) # 2
max(L) # 8
sum(L) # 19
all( [True, 1, 0.01, [1,2,3], "hello"]) # True
all( [None, False, 1, 0.01, [1,2,3], "hello"]) # False
any( [None, False, 0, 0.0, [], '', "hello"]) # True
any( [None, False, 0, 0.0, [], '']) # False
-
练习:
- 输入三个数,存于列表中,打印出这三个数的最大值,最小值和平均值
- 写程序,让用户循环输入一些整数,当输入 -1时结束输入,将这些整数存于列表L中
- 打印您共输入了几个有效的数
- 打印您输入的数的最大值是多少?
- 打印您输入的数的平均值是多少?
-
深拷贝和浅拷贝
浅拷贝 shallow copy
浅拷贝是指在对象复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程
如:
L = [3.1, 3.2]
L1 = [1, 2, L]
L2 = L1.copy() # 浅拷贝
print(L1) # [1, 2, [3.1, 3.2]]
print(L2) # [1, 2, [3.1, 3.2]]
L[0] = 3.14 # L2[2][0] = 3.14
print(L1) # [1, 2, [3.14, 3.2]]
print(L2) # [1, 2, [3.14, 3.2]]
print(L) # [3.14, 3.2]
- 深拷贝 deep copy:
import copy # 导入复制模块
L = [3.1, 3.2]
L1 = [1, 2, L]
L2 = copy.deepcopy(L1) # 深拷贝
print(L1) # [1, 2, [3.1, 3.2]]
print(L2) # [1, 2, [3.1, 3.2]]
L2[2][0] = 3.14
print(L1) # [1, 2, [3.1, 3.2]]
print(L2) # [1, 2, [3.14, 3.2]]
print(L) # [3.1, 3.2]
-
列表与字符串比较:
- 都是序列,元素之间有先后顺序关系
- 字符串是不可变的序列,列表是可变的序列
- 字符串中每个元素只能存储字符(编码),而列表可以存储任意类型的元素
- 列表和字符串都是可迭代对象
-
字符串文本解析方法split 和join
S.split(sep=None) 将字符串,使用sep作用分隔符分割 S字符串,返回分割后的后的字符串列表,当不给定参数时,用空白字符作用分隔符分割S.join(iterable) 用可迭代对象中的字符口中,返回一个中间用S进行分隔的字符串
示例:
s = “Beijing is capital”
L = s.split(’ ') # L = [‘Beijing’, ‘is’, ‘capital’]
L = [‘aaaa’,‘bbbb’,‘cccc’]
s2 = “#”.join(L) # s2 = “aaaa#bbbb#cccc” -
练习:
有字符串
s = “hello”
请生成如下字符串:
‘h e l l o’ 和 ‘h-e-l-l-o’’ '.join(s) # ‘h e l l o’
‘-’.join(s) # ‘h-e-l-l-o’ -
列表推导式 list comprehension
列表推导式是用可迭代对象创建列表的表达式- 作用:
用简易方法生成列表 - 语法:
[表达式 for 变量 in 可迭代对象]
或
[表达式 for 变量 in 可迭代对象 if 真值表达式]
示例:
- 作用:
# 以下生成一个数值为1~9的平方的列表
# [1, 4, 9, 16, 25, ...... 81]
L = []
for x in range(1, 10):
L.append(x**2)
# 用列表推导式:
L = [x**2 for x in range(1, 10)]
-
练习:
用列表推导式生成 1 ~ 100内所有奇数的平方的列表
[1, 9, 25, … ]L = [x**2 for x in range(1, 100, 2)]
示例:
# 以下生成一个数值为1~9的平方的列表(只保留偶数)
[4, 16, 36 ...]
L = [x**2 for x in range(1, 10) if x % 2 == 0]
-
练习:
-
写程序.输入一个开始的整数值用begin绑定
输入一个结束的整数用end绑定
将从begin开始到end结束(不包含end)的所有偶数存于列表中,并打印(建议用列表推导式完成) -
写程序,让用户输入很多个整数(包含正整数和负整数) 保存于列表L 中. 输入0结束输入. 然后把列表L中的所有正数存于列表L1 中,把列表L中的所有负数存于列表L2中
打印原列表L和 正数列表L1 和负数列表L2
-
-
列表推导式的嵌套:
[表达式1
for 变量1 in 可迭代对象1 if 真值表达式1
for 变量2 in 可迭代对象2 if 真值表达式2
… ]- 示例:
将列表[10, 20, 30] 中的元素与列表[1,2,3]元素分别相加,将得到的元素放于一个列表中
L = [x+y for x in [10, 20, 30] for y in [1, 2, 3]]
- 示例:
-
练习:
用字符串"ABC" 和 “123” 生成如下列表:
[‘A1’, ‘A2’, ‘A3’, ‘B1’, ‘B2’, ‘B3’, ‘C1’, ‘C2’, ‘C3’]
答案:
[x + y for x in “ABC” for y in “123”]-
已知有一个字符串:
s= ‘100,200,300,500,800’
将其转化为数字组成的列表,列表内部为整数:
L = [100,200,300,500,800] -
用列表推导式生成如下列表:
L = [1, 4, 7, 10, … 100]
答案:
L = [x for x in range(1, 101, 3)] -
用例表推导式生成如下列表(思考题)
[[1,2,3], [4,5,6], [7,8,9]]
答案:
-
# 方法1
[[x, x+1, x+2] for x in range(1,8,3)]
# 方法2
[[y for y in range(x, x + 3)]
for x in range(1,8,3)]
# 改为for语句
L = []
for x in range(1, 8, 3):
temp = []
for y in range(x, x + 3):
temp.append(y)
L.append(temp)
-
练习:
- 有一些数存于列表中.如:
L = [1, 3, 2, 1, 6, 4, 2, … 98,82]
- 将列表L中出现的数字存入到另一个列表L2中
要求:
重复出现多次的数字只在L2中保留一份(去重) - 将列表中出现两次的数字存于列表L3中,在L3中只保留一份
-
计算出100以内的全部素数,将这些素数存于列表中,然后打印出列表中的这些素数
-
生成前40 个斐波那契(Fibonacci)数列中的数
1 1 2 3 5 8 13 21
要求: 将这些数保存于列表中.打印这些数
- 有一些数存于列表中.如: