AcWing语法基础课【Python3】版题解-内置数据结构/字符串
【AcWing 0x00. 语法基础课【Python3】版题解-顺序/判断/循环语句】
【AcWing 0x01. 语法基础课【Python3】版题解-内置数据结构/字符串】
【AcWing 0x02. 语法基础课【Python3】版题解-函数/类和对象/常用库】
列表、元组、字典、集合、数组
例题
X = [int(input()) for i in range(10)]
for i in range(10):
print(f"X[{
i}] = {
X[i] if X[i] > 0 else 1}")
解析:先生成列表X,再用三目运算符把非正整数全部替换为1。
X = []
for i in range(10):
y = int(input())
X.append(y if y > 0 else 1)
print(f"X[{
i}] = {
X[i]}")
解析:在线处理,上下两个代码仅仅是有无使用list的区别。
for i in range(10):
y = int(input())
y = y if y > 0 else 1
print(f"X[{
i}] = {
y}")
使用array标准库:
import array
X = array.array('b')
for i in range(10):
y = int(input())
X.append(y if y > 0 else 1)
print(f"X[{
i}] = {
X[i]}")
解析:array仅在创建时和列表不同,需要指定数据类型。
使用匿名表达式:
X = [int(input()) for i in range(10)]
Y = list(map(lambda y: y if y > 0 else 1, X))
for i in range(10):
print(f"X[{
i}] = {
Y[i]}")
解析:创建两个列表,第一个列表接受输入值,第二个列表通过一个 map()
把输入值映射为题示输出值,其中映射规则“非正整数全部替换为1”使用匿名表达式实现。
V = int(input())
N = [V * 2 ** i for i in range(10)]
for i in range(10):
print(f"N[{
i}] = {
N[i]}")
解析:列表推导式即可,在线处理和上一题一样,略。
A = [float(input()) for i in range(100)]
for i in range(100):
if A[i] <= 10:
print(f"A[{
i}] = {
A[i]}")
解析:列表推导式处理输入数据即可,在线处理和上一题一样,略。
L = int(input())
K = input()
matrix = [list(map(float, input().split())) for i in range(12)]
if K == "S":
print(f"{
sum(matrix[L]):.1f}")
else:
print(f"{
sum(matrix[L]) / len(matrix[L]):.1f}")
解析:通过列表解析生成矩阵,对于 N × N N\times N N×N的矩阵,用for循环生成N行,用list(mapfloat, input().split()))
把这一行输入的数据转变成浮点数列表。
K = input()
matrix = [list(map(float, input().split())) for i in range(12)]
Sum = 0
for i in range(11):
Sum += sum(matrix[i][i+1:12])
# 等价于 Sum += sum(matrix[i][i+1:])
if K == "S":
print(f"{
Sum:.1f}")
else:
print(f"{
Sum / 66:.1f}")
解析:列表切片list[a:b]
返回列表下标从a到b的值,注意是左闭右开,只取到b的前一个之值而不包括b。
K = input()
matrix = [list(map(float, input().split())) for i in range(12)]
Sum = 0
for i in range(11):
Sum += sum(matrix[i][0:12-i-1])
# 等价于 Sum += sum(matrix[i][:12-i-1])
if K == "S":
print(f"{
Sum:.1f}")
else:
print(f"{
Sum / 66:.1f}")
解析:和上一题一样,只是切片区域改变。
K = input()
matrix = [list(map(float, input().split())) for i in range(12)]
Sum = 0
for i in range(5):
Sum += sum(matrix[i][i+1:12-i-1])
if K == "S":
print(f"{
Sum:.1f}")
else:
print(f"{
Sum / 30:.1f}")
解析:和上一题一样,只是切片区域改变。
K = input()
matrix = [list(map(float, input().split())) for i in range(12)]
Sum = 0
for i in range(5):
Sum += sum(matrix[i+1][:i+1])
for i in range(5):
Sum += sum(matrix[i+6][:5-i])
if K == "S":
print(f"{
Sum:.1f}")
else:
print(f"{
Sum / 30:.1f}")
解析:和上一题一样,只是切片区域改变。
def edgePadding(n, m, matrix):
if 2 * m - 1 == n:
matrix[m-1][m-1] = m
return
elif 2 * m == n:
matrix[m-1][m-1:m+1] = matrix[m][m-1:m+1] = [m, m]
return
else:
edgePadding(n, m + 1, matrix)
length = n - 2 * (m - 1)
matrix[m-1][m-1:m+length-1] = [m for i in range(length)]
matrix[m+length-2][m-1:m+length-1]