磁盘容量
题目描述
磁盘的容量单位常用的有M、G、T
他们之间的换算关系为1T =1024G,1G=1024M
现在给定n块磁盘的容量,请对他们按从小到大的顺序进行稳定排序
例如给定5块盘的容量
5
1T
20M
3G
10G6T
3M12G9M
排序后的结果为
20M
3G
3M12G9M
1T
10G6T
注意单位可以重复出现
上述3M12G9M表示的容量即为3M12G9M和12M12G相等
输入描述
输入第一行包含一个整数n,2 <= n<= 100,表示磁盘的个数。
接下来的n行,每行一个字符串,2 < 长度 < 30,表示磁盘的容量,
由一个或多个格式为MV的子串组成,其中M表示容量大小,V表示容量单位,
例如20M、1T。
磁盘容量的范围1 ~ 1024的正整数,单位M、G、T。
输出描述
输出n行
表示n块磁盘容量排序后的结果
示例一
输入
3
1G
2G
1024M
输出
1G
1024M
2G
说明
稳定排序要求相等值保留原来位置
示例二
输入
3
2G4M
3M2G
1T
输出
3M2G
2G4M
1T
代码
import re
disk_num = int(input())
disk_list = []
for i in range(disk_num):
disk_list.append(input())
disk_array = {}
disk_total = []
for i in range(disk_num):
key = re.findall(r'[TGM]', disk_list[i])
val = re.findall(r'[0-9]{1,}', disk_list[i])
for j in range(len(key)):
if disk_array.get(key[j]) == None:
disk_array[key[j]] = int(val[j])
else:
disk_array[key[j]] += int(val[j])
# print(disk_array)
sum_disk = 0
for k, v in disk_array.items():
if k == 'T':
sum_disk += (v * 1024 * 1024)
elif k == 'G':
sum_disk += (v * 1024)
elif k == 'M':
sum_disk += v
# print(sum_disk)
disk_array = {}
disk_total.append(sum_disk)
# print(disk_total)
disk_sort = sorted(list(zip(disk_list, disk_total)), key=lambda x: x[1])
for i in range(disk_num):
print(disk_sort[i][0])
代码解读
这段代码实现了一个程序,它接收用户输入的一组硬盘容量信息,并按照硬盘总容量从小到大的顺序输出这组硬盘信息。
程序首先读取用户输入的硬盘数量,并使用一个 for 循环将每个硬盘信息添加到列表 disk_list 中。
接下来,程序定义了一个空字典 disk_array 和一个空列表 disk_total,用于存储每个硬盘的容量信息。
接着,程序使用正则表达式从每个硬盘信息中提取出容量和单位的信息,并将其添加到字典 disk_array 中。
然后程序根据每个硬盘的容量信息计算出其总容量,将其添加到列表 disk_total 中。
在计算完每个硬盘的总容量之后,
程序将字典 disk_array 重新赋值为空字典,以便下一个硬盘的容量信息使用。
程序将每个硬盘的总容量和硬盘信息组成一个元组,添加到列表 disk_sort 中。
最后,程序使用 sorted 函数对列表 disk_sort 进行排序,
并按照硬盘总容量从小到大的顺序依次输出硬盘信息。
![](https://i-blog.csdnimg.cn/blog_migrate/cd28adc1abf20bbd4bb28c586a170f3b.gif)