测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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 分)

上一题 下一题