第四章
--1--
在循环中continue语句的作用是(结束本次循环)退出循环的当前迭代 √
带有else子句的循环如果因为执行了break语句而退出的话,会执行else子句的代码。×
因为break是跳出整个循环,所以如果循环体内有else子句,且循环是通过break退出的,那么else子句中的代码也不会被执行。
循环结构可以没有else子句
e.g.
for i in range(3):
print(i)
下面程序的输出是3。×
lst=[34,6,7,0,0,0,9]
n=0
for i in lst:
if i==0:
lst.remove(i)
n+=1
print(n)
第一次移除原索引为3的‘0’ 然后原索引为456分别变为345
刚刚查过3这个索引 接下来查4即查原索引为5的‘0’并移除
后面查不到0了所以总共移除了两个0
故输出应该为2,而不是3。
(思考:倘若变成列表里面0不是连着的分布的,例如:
下面输出是3
lst=[0,34,6,0,7,0,9]
n=0
for i in lst:
if i==0:
lst.remove(i)
n+=1
print(n)
对的
)
关于可变/不变
下面程序输出值是1。×
data=[[1]*3]*3##①
data[0][1]=45#②
print(data[2][1])#③
①处 *3是 重复引用同一个列表三次
data = [
[1, 1, 1], # 这三个内层列表实际上是同一个对象
[1, 1, 1],
[1, 1, 1]
]
②由于这三个内层列表是相同的对象,因此修改会反映在所有引用中
现在data即
data = [
[1, 45, 1],
[1, 45, 1],
[1, 45, 1]
]
所以③输出45
思考:如果外面不是用*3
data = [[1] * 3 for i in range(3)]
data[0][1] = 45
print(data) # 输出 [[1, 45, 1], [1, 1, 1], [1, 1, 1]]
print(data[2][1]) # 输出 1
下面程序中 ,i的循环终值是__________。
for i in range(10):
print(i)
是9
(但是如果是像while i<5:这种,终值就是5 )
下面程序中语句print(i*j)共执行了___________________次。
for i in range(5):
for j in range(2,5):
print(i*j)
每次循环的具体输出:
1. 当 `i = 0` 时,内层循环 `j` 取值为 `[2, 3, 4]`:
- `0 * 2 = 0`
- `0 * 3 = 0`
- `0 * 4 = 0`
2. 当 `i = 1` 时,内层循环 `j` 取值为 `[2, 3, 4]`:
- `1 * 2 = 2`
- `1 * 3 = 3`
- `1 * 4 = 4`
3. 当 `i = 2` 时,内层循环 `j` 取值为 `[2, 3, 4]`:
- `2 * 2 = 4`
- `2 * 3 = 6`
- `2 * 4 = 8`
4. 当 `i = 3` 时,内层循环 `j` 取值为 `[2, 3, 4]`:
- `3 * 2 = 6`
- `3 * 3 = 9`
- `3 * 4 = 12`
5. 当 `i = 4` 时,内层循环 `j` 取值为 `[2, 3, 4]`:
- `4 * 2 = 8`
- `4 * 3 = 12`
- `4 * 4 = 16`
外层是5次 内层是3次 总共15次
执行下面程序产生的结果是___________________。
x=2;y=2.0 #分号可把两个语句写在一行
if(x==y):
print("相等")
else:
print("不相等")
相等
注:Python 在比较两个不同类型的数值时会进行类型转换,这种转换称为“隐式类型转换”或“类型强制”。在这种情况下,Python 会将整数 x 转换为浮点数(如果需要的话),或者将浮点数 y 转换为整数(如果需要的话),以便进行比较。由于 2 和 2.0 的数值相同
注意 如果for i in range(10,0)这种步长非负并且参数1比参数2大的,range就不产生任何值
for i in range(1,5):
j=0
while j<i:
print(j,end=" ")
j+=1
print()
会输出怎样的呢↓
0
0 1
0 1 2
0 1 2 3
下面程序运行后输出是
a = [1, 2, 3, 4, [5, 6], [7, 8, 9]] #一个列表
s = 0
for row in a: #遍历a中的元素
if type(row)==list: #检查元素是否为列表
for elem in row: #处理嵌套列表
s += elem
else: #处理非列表元素
s+=row
print(s)
所以即算列表和 为45
下面程序运行后输出是_________。
l3=[i+j for i in range(1,6) for j in range(1,6)]
print(sum(l3))
嵌套循环 相当于
for i in range(1, 6):
for j in range(1, 6):
l3.append(i + j)
先固定一个i比如说i为1,j从1到5,生成i+j即2,3,4,5,6
接下来i是2,j从1到5……以此类推
总和就是2加到6 + 3加到7 + 4到8 + 5到9 + 6到10
即20 + 25 + 30 +35 + 40 即150
下面程序运行后输出是_________。
l3=[[(i,j) for i in range(1,6)] for j in range(1,6)]
print(l3[2][1][0])
分析:这个列表生成式创建了一个5x5的二维列表,其中每个元素都是一个元组 (i, j)。外层列表生成式遍历 j 从 1 到 5,内层列表生成式遍历 i 从 1 到 5。
l3 = [
[(1, 1), (2, 1), (3, 1), (4, 1), (5, 1)], # 当 j = 1
[(1, 2), (2, 2), (3, 2), (4, 2), (5, 2)], # 当 j = 2
[(1, 3), (2, 3), (3, 3), (4, 3), (5, 3)], # 当 j = 3
[(1, 4), (2, 4), (3, 4), (4, 4), (5, 4)], # 当 j = 4
[(1, 5), (2, 5), (3, 5), (4, 5), (5, 5)] # 当 j = 5
]
所以是 2
下面程序运行后,最后一行输出是_________。
n = 3
m = 4
a = [0] * n #a = [0, 0, 0]
for i in range(n):
a[i] = [0] * m #在每次迭代中将 a[i] 赋值为一个长度为 4 的列表 [0, 0, 0, 0]
print(a[0][2])
分析:
前三行
n 被设置为 3,表示列表 a 将有3个子列表。
m 被设置为 4,表示每个子列表将有4个元素。
a = [0] * n 创建一个包含 3 个元素的列表,每个元素初始为 0。
迭代分析:
第一轮i=0 a[0] 赋值为 [0, 0, 0, 0] 所以a = [[0, 0, 0, 0], 0, 0] 输出0
第二轮i=1 a[1] 赋值为 [0, 0, 0, 0] 所以a = [[0, 0, 0, 0], [0, 0, 0, 0], 0] 输出0
第三轮i=2 a[2] 赋值为 [0, 0, 0, 0] 所以a = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 输出0
最终输出
0
0
0
所以答案为 0
关于列表的引用
下面程序的输出是
row=[0]*3 #创建列表[0, 0, 0]
data=[row,row,row] #创建了一个二维列表 data,其每一行都引用同一个 row 列表
data[2][2]=7 # data 的第三行第三列的值设置为 7。由于所有行都引用同一个 row 列表
#因此这个操作会影响到所有引用 row 列表的地方
print(data[0][2])
初始
row = [0, 0, 0]
data = [
row, # [0, 0, 0]
row, # [0, 0, 0]
row # [0, 0, 0]
]
data[2][2] = 7 相当于 row[2] = 7
现在
data = [
[0, 0, 7],
[0, 0, 7],
[0, 0, 7]
]
所以结果是 7
下面程序的输出是
data=[[0]*3] *3 #使用的是 [[0] * 3] * 3,所以 data 中的3个子列表实际上是同一个列表的引用
data[2][2]=7 #由于所有行都引用同一个列表,这个操作会影响所有引用该列表的地方
print(data[0][2])
分析:所以答案是 7
下面程序的输出是
data=[]
for i in range(3):
data.append([0]
data[2][2]=7
print(data[0][2])
分析:使用循环 for i in range(3) 遍历3次,每次迭代中,向 data 添加一个包含3个元素 [0, 0, 0] 的新列表。这样,data 中的每一行都是独立的列表
data[2][2] = 7 这个修改只会影响 data[2]
初始
data = [
[0, 0, 0], # 第一次迭代添加的列表
[0, 0, 0], # 第二次迭代添加的列表
[0, 0, 0] # 第三次迭代添加的列表
]
修改后
data = [
[0, 0, 0],
[0, 0, 0],
[0, 0, 7]
]
所以结果是0
下面程序的输出是
mat=[[i*3+j+1 for j in range(3)] for i in range(5)]
mattrans=[[row[col] for row in mat] for col in range(3)]
print(mattrans[1][3])
分析:①mat = [[i*3 + j + 1 for j in range(3)] for i in range(5)]这一行
外层循环遍历 i 从 0 到 4,共 5 次(生成 5 行)。
内层循环遍历 j 从 0 到 2,共 3 次(生成 3 列)。
每个元素的值为 i * 3 + j + 1。
具体生成的mat矩阵如下
mat = [
[1, 2, 3], # 当 i = 0
[4, 5, 6], # 当 i = 1
[7, 8, 9], # 当 i = 2
[10, 11, 12], # 当 i = 3
[13, 14, 15] # 当 i = 4
]
②mattrans = [[row[col] for row in mat] for col in range(3)]这一行
外层循环遍历 col 从 0 到 2(生成转置后的3行)。
内层循环遍历 mat 中的每一行,提取第 col 列的元素,形成转置后的列。
mattrans = [
[1, 4, 7, 10, 13], # 第0列转成第0行
[2, 5, 8, 11, 14], # 第1列转成第1行
[3, 6, 9, 12, 15] # 第2列转成第2行
]
即转置列表 输出是11
未经允许 不得转载
标签:知识点,输出,python,PTA,列表,range,print,data,row From: https://blog.csdn.net/like_cs_810/article/details/139584270