A35790. 工厂有一台检测设备用于检测器件,各个器件在不完全相同时刻送达, 且检测时长各有不同。现在要按器件的送达时间(若送达时间相同则按检测时长) 进行排序后再送检, 送达时间和检测时间都是按升序排序 。 已知各个器件原始信 息存在列表 qj 中 :qj=[[2,1],[1,3],[0,2],[4,3],[12,4],[10,1],[4,1]], 其中器件信息[2,1]表示器件送达时间是 2, 检测时长是…
题目描述
工厂有一台检测设备用于检测器件,各个器件在不完全相同时刻送达, 且检测时长各有不同。
现在要按器件的送达时间(若送达时间相同则按检测时长) 进行排序后再送检, 送达时间和检测时间都是按升序排序 。
已知各个器件原始信 息存在列表 qj 中 :qj=[[2,1],[1,3],[0,2],[4,3],[12,4],[10,1],[4,1]], 其中器件信息[2,1]表示器件送达时间是 2, 检测时长是 1,其他器件信息类推。
现在编写 Python 程序对各个器件进行排序, 并重新输出。 排序后的器件列表如下, 请你在划线处完善程序:
qj=[[2,1],[1,3],[0,2],[4,3],[12,4],[10,1],[4,1]]
for i in range(len(qj)-1):
for j in range(0, ____①____ ):
if ____②____ or (qj[j][0]==qj[j+1][0]and ____③____ ):
qj[j],qj[j+1]=qj[j+1],qj[j]
print( ____④____ )
参考答案
qj=[[2,1],[1,3],[0,2],[4,3],[12,4],[10,1],[4,1]]
for i in range(len(qj) - 1):
for j in range(0, len(qj) - 1 - i):
if qj[j][0] > qj[j + 1][0] or qj[j][0] == qj[j + 1][0] and qj[j][1] > qj[j + 1][1]:
qj[j], qj[j + 1] = qj[j + 1], qj[j]
print(qj)答案解析
①本题考查的是对二维列表进行冒泡排序。
外循环控制排序趟数, 内循环控制排序比较的次数以及比较的起止位。外循环变量 i 从 0 开始, 内循环变量 j 从 0 开始,显然终值是 len(qj)-1-i,比较过程从前往后两两相比。 因此①处填写的步长应为 len(qj)-1-i;
②根据题目意思, 比较依据先是送达时间(从小到大) , 若相同则比较检测时长, 因此②处表达的应该是相邻两个器件的送达时间相比, 从交换语句来看第 j 项被交换至 j+1 项, 从而判定②处答案为 qj[j][0]>qj[j+1][0];
③qj[j][0]表示送达时间, qj[j][1]则表示的是检测时长, 从 qj[j][0]==qj[j+1][0]可知此处表示送达时间相同的情况下满足何种条件第 j 项会和第 j-1 项交换, 显然要比的是检测时间, 故而③处填写 qj[j][1]>qj[j+1][1]。
④根据题意, 最后需要输出排序后的器件列表, 因此④处填写的器件列表名称 qj。
评分标准:
(1) len(qj)-1-i; (4 分)
(2) qj[j][0]>qj[j+1][0]; (4 分)
(3) qj[j][1]>qj[j+1][1]; (4 分)
(4) qj。 (4 分)