(1)假设 lst=[30,1,2,1,0],在应用下面的每条语句之后列表变成了什么?假设每行代码都是独立的。
lst.append(40)
lst.insert(1,43)
lst.extend([1,43])
lst.remove(1)
lst.pop(1)
lst.pop()
lst.sort()
lst.reverse()
random.shuffle(lst)
[30, 1, 2, 1, 0, 40]
[30, 43, 1, 2, 1, 0]
[30, 1, 2, 1, 0, 1, 43]
[30, 2, 1, 0]
[30, 2, 1, 0]
[30, 1, 2, 1]
[0,1,1,2,30]
[0,1,2,1,30]
随机打乱
(2)假设Ist=[30,1,2,1,0],下面每条语句的返回值是什么?
lst.index(1)
lst.count(1)
len(lst)
max(lst)
min(lst)
sum(lst)
- 1
- 2
- 5
- 30
- 0
- 34
(3)假设 list1=[30,1,2,1,0] 而 list2=[1,21,13],下面每条语句的返回值是什么?
list1 + list2
2 * list2
list2 * 2
list1[1 :3]
list1[3]
- [30, 1, 2, 1, 0, 1, 21, 13]
- [1, 21,13, 1, 21, 13]
- [1, 21, 13, 1, 21, 13]
- [1,2]
- [1]
(4)假设 Ist=[30,1,2,1,0],下面每条语句的返回值是什么?
[x for x in list1 if x > 1]
[x for x in range(0,10,2)]
[x for x in range(10,0,-2)]
30, 2
0, 2, 4, 6, 8
10, 8, 6, 4, 2
(5)假设 list1 =[30,1,2,1,0]而 list2=[1,21,13],下面每条语句的返回值是什么?
list1 < list2
list1 <= list2
list1 == list2
list1 != list2
list1 > list2
list1 >= list2
False
False
False
True
True
True
(6)在执行完下面的代码行之后list1和list2 是什么?
list1 = [1,43]
list2 = [x for x in list1]
list1[0]= 22
list1= [22, 43]
list2 = [1,43]
(7)如何从字符串中获取一个列表?假设s1是welcome。那么 s1.split('o’)是什么?
‘welc’, ‘me’
(8)下面代码的输出是什么?
lst = [1,2,3,4,5,6]
for i in range(1,6):
lst[i] = lis[i - 1]
print(lst)
1, 1, 1, 1, 1, 1
(9)下面代码的输出是什么?
list1 = list(range(1,10,2))
list2 =[] + list1
list1[0]= 111
print(list1)
print(list2)
1, 3, 5, 7, 9
(10)给出下面两段程序的输出:
#代码A
def main():
number =0
numbers =[10]
m(number,numbers)
print("number is", number,"and numbers[0]is",numbers[0])
def m(x,y):
x = 3
y[0]= 3
main()
number is 0 and numbers[0] is 3
#代码B
def main():
lst=[1,2,3,4,5]
reverse(lst)
for value in lst:
print(value,end='')
def reverse(lst):
newLst = len(lst) * [0]
for i in range(len(lst)):
newLst[i]= lst[len(lst) - 1 - i]
lst= newLst
main()
[5, 4, 3, 2, 1,]
题目描述
读入学生成绩,获取最高分best,然后根据下面的规则赋等级值:
(1)如果分数≥best-10,等级为A
(1)如果分数≥best-20,等级为B
(1)如果分数≥best-30,等级为C
(1)如果分数≥best-40,等级为D
(1)其他情况,等级为F
输入输出描述
输入两行,第一行输入学生人数n,第二行输入n个学生的成绩
输入n行,表示每个学生的成绩等级
示例
输入:
4
40 55 70 58
输出:
学生0分数为40,等级为C
学生1分数为55,等级为B
学生2分数为70,等级为A
学生3分数为58,等级为B
#指定等级
#人数
n = int(input())
#成绩
arr = list(map(float, input().split(" ")))
#获取最高分
max_score = max(arr)
for index in range(len(arr)):
str = ""
if max_score - 40 <= arr[index] < max_score - 30:
str = f'学生{index}分数为{arr[index]:.0f},等级为D'
elif max_score - 30 <= arr[index] < max_score - 20:
str = f'学生{index}分数为{arr[index]:.0f},等级为C'
elif max_score - 20 <= arr[index] < max_score - 10:
str = f'学生{index}分数为{arr[index]:.0f},等级为B'
elif arr[index] >= max_score - 10:
str = f'学生{index}分数为{arr[index]:.0f},等级为A'
else:
str = "等级为F"
print(str)
题目描述
读入n个数字,并显示互不相同的数(即一个数出现多次,但仅显示一次),数组包含的都是不同的数
输入输出描述
输入两行,第一行为数字的个数n,第二行为n个数字
输出数组,包含的都是不同的数
示例
输入:
10
1 2 3 2 1 6 3 4 5 2
输出:
1 2 3 6 4 5
#打印不同的数
#数字个数
n = int(input())
#数字
arr = [int(i) for i in input().split(" ")]
arr2 = []
for i in range(len(arr)):
for j in range(i + 1, len(arr)):
if arr[i] == arr[j]:
break
else:
arr2.append(arr[i])
print(arr2)
题目描述
编程程序,对给定的数组 [1, 2, 3, 4, 5, 6, 7, 8, 9] 进行随机打乱,并输出打乱后的结果
#打乱数组
import random
def list_shuffle(arr):
for i in range(len(arr)):
j = random.randint(0,len(arr) - 1)
arr[i], arr[j] = arr[j], arr[i]
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list_shuffle(arr)
print(arr)
**视频链接:**录制: 录制1
录制文件:https://meeting.tencent.com/crm/KmdRqq3qa3
题目描述
一个学校有100个更衣室和100个学生。所有的更衣室在开学第一天都是锁着的。随着学生进入,第一个学生表示为S1,打开每个更衣室;然后第二个学生S2,从第二个更衣室开始,用L2表示,关闭所有其他更衣室;学生S3从第三个更衣室L3开始,改变每三个更衣室(如果打开则关闭,如果关闭则打开);学生S4从更衣室L4开始,改变每四个更衣室;学生S5开始从更衣室L5开始,改变每五个更衣室。依次类推,直到学生S100改变L100。
在所有学生都经过了操作后,哪些更衣室是打开的?编程找出答案。
#更衣室难题
arr = [0] * 100
# i 表示学生
for i in range(1,len(arr) + 1):
#第一个学生打开全部更衣室
if i == 1:
for j in range(i - 1, len(arr)):
arr[j] ^= 1
#第二个学生关闭所有更衣室,从第二个开始
elif i == 2:
for j in range(i - 1, len(arr)):
arr[j] ^= 1
else:
for j in range(i - 1, len(arr), i):
arr[j] ^= 1
for i in range(len(arr)):
if arr[i] == 1:
print(f'L{i + 1}', end = " ")
题目描述
为了实现矩阵A乘以矩阵B,矩阵A的列数必须等于矩阵B的行数
假设矩阵C是相乘的结果,矩阵A的列数为n,那么每个元素 C i j = A i 1 ∗ B 1 j + A i 2 ∗ B 2 j + . . . + A i n ∗ B n j C_{ij}=A_{i1}*B_{1j}+A_{i2}*B_{2j}+...+A_{in}*B_{nj} Cij=Ai1∗B1j+Ai2∗B2j+...+Ain∗Bnj
例如,对于两个3×3的矩阵A和B:
其中 C i j = A i 1 ∗ B 1 j + A i 2 ∗ B 2 j + A i 3 ∗ B 3 j C_{ij}=A_{i1}*B_{1j}+A_{i2}*B_{2j}+A_{i3}*B_{3j} Cij=Ai1∗B1j+Ai2∗B2j+Ai3∗B3j
输入输出描述
输入矩阵A的行列rowA和colA,接下来输入rowA行,每行colA个元素
输入矩阵B的行列rowB和colB,接下来输入rowB行,每行colB个元素
输出rowA行colB列的矩阵,为相乘的结果
示例
输入:
3 3
1 2 3
4 5 6
7 8 9
3 3
0 2.0 4.0
1 4.5 2.2
1.1 4.3 5.2
输出:
5.3 23.9 24
11.6 56.3 58.2
17.9 88.7 92.4
#输入矩阵A
rowA, colA = map(int, input().split(" "))
matrix = []
for i in range(rowA):
row = list(map(float, input().split(" ")))
matrix.append(row)
#输入矩阵B
rowB, colB = map(int, input().split(" "))
matrix2= []
for i in range(rowA):
row = list(map(float, input().split(" ")))
matrix2.append(row)
#初始化矩阵3
matrix3 = []
for i in range(rowA):
row = [0] * colA
matrix3.append(row)
#计算矩阵A * B
for i in range(rowA):
for j in range(colB):
for k in range(colA):
matrix3[i][j] += matrix[i][k] * matrix2[k][j]
#输出
for i in range(rowA):
for j in range(colA):
print(f'{matrix3[i][j]:.1f}', end = " ")
print()
题目描述
输入一个矩阵,然后把每列进行升序排序,并输出结果
输入输出描述
输入矩阵的行列n和m,接下来输入n行,每行m个元素
输出按列排序后的矩阵
示例
输入:
4 4
4 5 8 2
5 1 7 3
9 4 2 1
8 3 6 6
输出:
4 1 2 1
5 3 6 2
8 4 7 3
9 5 8 6
#按列排序
n, m = map(int, input().split(" "))
matrix = []
for i in range(n):
row = list(map(float, input().split(" ")))
matrix.append(row)
#取出每一列然后排序
for j in range(len(matrix[0])):
line = []
for i in range(n):
line.append(matrix[i][j])
line.sort()
#把原矩阵的列更新为排好序的列
for i in range(n):
matrix[i][j] = line[i]
#打印矩阵
for i in range(n):
for j in range(m):
print(f'{matrix[i][j]:.0f}', end = " ")
print()
**视频链接:**录制: 录制2
录制文件:https://meeting.tencent.com/crm/KPGeoo3W08
题目描述
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
输入输出描述
输入矩阵的行列row和col,接下来有row行输入,每行col个数字
输出遍历后的结果
示例
输入:
3 4
1 2 3 4
5 6 7 8
9 10 11 12
输出:
1 2 3 4 8 12 11 10 9 5 6 7
def solve(matrix):
#定义出上下左右边界
top, bottom = 0, len(matrix) - 1
left, right = 0, len(matrix[0]) - 1
result = []
while top <= bottom and left <= right:
#从左到右遍历
for i in range(left, right + 1):
result.append(matrix[top][i])
top += 1
#从上到下遍历
for i in range(top, bottom + 1):
result.append(matrix[i][right])
right -= 1
#如果还有行从右往左
if top <= bottom:
for i in range(right, left - 1, -1):
result.append(matrix[bottom][i])
bottom -= 1
#如果还有列 从右往左
if left <= right:
for i in range(bottom, top - 1, -1):
result.append(matrix[i][left])
left += 1
return result
row, col = map(int, input().split(" "))
matrix = []
for i in range(row):
rows = list(map(int, input().split(" ")))
matrix.append(rows)
print(solve(matrix))
题目描述
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。
输入输出描述
输入矩阵的行row和列col,和目标值target
接下来输入row行,每行col个元素
输出是否存在
示例
输入:
5 5 5
1 4 7 11 15
2 5 8 12 19
3 6 9 16 22
10 13 14 17 24
18 21 23 26 30
输出:
true
def search(arr, target):
left = 0
right = len(arr) - 1
while True:
mid = (left + right) // 2
if target > arr[mid]:
left = mid + 1
elif target < arr[mid]:
right = mid - 1
else:
return True
if left > right:
return False
def solve(matrix, target):
for i in range(len(matrix)):
if matrix[i][0] <= target <= matrix[i][len(matrix[i]) - 1]:
if search(matrix[i], target):
return True
return False
row, col, target = map(int, input().split(" "))
matrix = []
for i in range(row):
rows = list(map(int, input().split(" ")))
matrix.append(rows)
print(solve(matrix, target))
**视频链接:**录制: 录制3
录制文件:https://meeting.tencent.com/crm/l5nvYy0V5b
题目描述
给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。
输入输出描述
输入数组长度n,和n个元素
输出最长连续递增序列的长度
示例
输入:
5
1 3 5 4 7
输出:
3
解释:
最长连续递增序列是 [1,3,5], 长度为3。
尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。
n = int(input())
arr = list(map(int, input().split(" ")))
max_length = 1
cur_length = 1
for i in range(n - 1):
if arr[i] <= arr[i + 1]:
cur_length += 1
if max_length < cur_length:
max_length = cur_length
else:
cur_length = 1
print(max_length)
**视频链接:**录制: 录制4
录制文件:https://meeting.tencent.com/crm/NADpAdwy7e
题目描述
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
输入输出描述
输入数组长度n,接下来输入n个元素
输出最大水量
示例1
输入:
9
1 8 6 2 5 4 8 3 7
输出:
49
解释:
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49
#暴力算法
n = int(input())
arr = list(map(int, input().split(" ")))
#计算两条垂线的面积 (right - left) * min(height[right], height[left])
max_s = 0
for i in range(len(arr) - 1):
for j in range(i + 1, len(arr)):
s = (j - i) * min(arr[j], arr[i])
if s > max_s:
s, max_s = max_s, s
print(max_s)
#双指针法
def solve(arr):
left = 0
right = len(arr) - 1
max_s = 0
while left < right:
s = (right - left) * min(arr[right], arr[left])
if max_s < s:
max_s, s = s, max_s
if arr[right] > arr[left]:
left += 1
else:
right -= 1
return max_s
n = int(input())
arr = list(map(int, input().split(" ")))
print(solve(arr))