(Pythin基础习题)给定一个数组,找出其中最小的K个数
程序员文章站
2024-02-04 08:22:22
...
Pythin基础习题
给定一个数组,找出其中最小的K个数。例如数组元素是(4,5,1,6,2,7,3,8)这8个数字,则最小的4个数字是1,2,3,4.如果K>数组的长度,那么返回一个空的数组。
解题思路:
1,先内部给出数组,sorted排序,检查运行结果:
num_list = [4,5,1,6,2,7,3,8]
num_list1 = sorted(num_list)
print(num_list1)
运行结果:
[1, 2, 3, 4, 5, 6, 7, 8]
2,内部定义K以及目标列表target_list,判断K是否超过数组长度,若不超过,取排序后列表的前K个值写入目标列表。若超过,则不做任何操作,输出空目标列表:
num_list = [4,5,1,6,2,7,3,8]
K = 4
target_list = []
if K in range(0,len(num_list)):
num_list1 = sorted(num_list)
target_list = num_list1[0:K]
print(num_list1)
print(target_list)
else:
pass
运行结果:
[1, 2, 3, 4]
3,完善人机交互,input列表及K值
num_list = input('请给定一个数组:')
# num_list = [4,5,1,6,2,7,3,8]
K = input('请给定取最小的几个数:')
# K = 4
target_list = []
if K in range(0,len(num_list)):
num_list1 = sorted(num_list)
target_list = num_list1[0:K]
# print(num_list1)
else:
pass
print(target_list)
运行结果:
请给定一个数组:(4,5,1,6,2,7,3,8)
请给定取最小的几个数:4
[]
4,运行结果为空,分析错误是数据类型错误,打印数据类型:
num_list = input('请给定一个数组:')
# num_list = [4,5,1,6,2,7,3,8]
K = input('请给定取最小的几个数:')
# K = 4
target_list = []
print(type(num_list))
print(type(K))
运行结果:
请给定一个数组:(4,5,1,6,2,7,3,8)
请给定取最小的几个数:4
<class 'str'>
<class 'str'>
5,全部为字符串,可以强制转换类型,然后输出结果:
num_list = list(input('请给定一个数组:'))
# num_list = [4,5,1,6,2,7,3,8]
K = int(input('请给定取最小的几个数:'))
# K = 4
target_list = []
# print(type(num_list))
# print(type(K))
if K in range(0,len(num_list)):
num_list1 = sorted(num_list)
target_list = num_list1[0:K]
# print(num_list1)
else:
pass
print(target_list)
运行结果:
请给定一个数组:(4,5,1,6,2,7,3,8)
请给定取最小的几个数:4
['(', ')', ',', ',']
6,运行结果异常,分析原因是手动输入值均为字符串,需要先将其转换为数组:
num_list = list(input('请给定一个数组:'))
# num_list = [4,5,1,6,2,7,3,8]
K = int(input('请给定取最小的几个数:'))
# K = 4
target_list = []
inset_list = (num_list[1:-1:2])
print(num_list)
print(inset_list)
inset_list1 = [int(i) for i in inset_list]
print(inset_list1)
运行结果:
请给定一个数组:[4,5,1,6,2,7,3,8]
请给定取最小的几个数:4
['[', '4', ',', '5', ',', '1', ',', '6', ',', '2', ',', '7', ',', '3', ',', '8', ']']
['4', '5', '1', '6', '2', '7', '3', '8']
[4, 5, 1, 6, 2, 7, 3, 8]
7,转换数组成功,补入后续条件:
num_list = list(input('请给定一个数组:'))
# num_list = [4,5,1,6,2,7,3,8]
K = int(input('请给定取最小的几个数:'))
# K = 4
target_list = []
inset_list = (num_list[1:-1:2])
# print(num_list)
# print(inset_list)
inset_list1 = [int(i) for i in inset_list]
# print(inset_list1)
if K in range(0,len(inset_list1)):
num_list1 = sorted(inset_list1)
target_list = num_list1[0:K]
else:
pass
print(target_list)
运行结果:
请给定一个数组:[4,5,1,6,2,7,3,8]
请给定取最小的几个数:4
[1, 2, 3, 4]
改变输入测试:
请给定一个数组:[4,5,1,6,2,7,3,8,2,4,6,8,9,4,3]
请给定取最小的几个数:8
[1, 2, 2, 3, 3, 4, 4, 4]
测试K值超范围:
请给定一个数组:[4,5,1,6,2,7,3,8]
请给定取最小的几个数:10
[]
功能实现。
优化
1,后期测试发现如果输入数组为两位数,则无法实现人机交互,目前没有想到合适方法,需要改变输入方式,输入方式由[4,5,1,6,2,7,3,8]改为4,5,1,6,2,7,3,8:
num_list = list(input('请给定一个以,隔开数组:').split(','))
# num_list = [4,5,1,6,2,7,3,8]
K = int(input('请给定取最小的几个数:'))
# K = 4
target_list = []
# inset_list = (num_list[1:-1:2])
# print(num_list)
# print(inset_list)
inset_list1 = [int(i) for i in num_list]
# print(inset_list1)
if K in range(0,len(inset_list1)):
num_list1 = sorted(inset_list1)
target_list = num_list1[0:K]
else:
pass
print(target_list)
运行结果:
请给定一个以,隔开数组:4,5,1,6,2,7,3,8
请给定取最小的几个数:4
[1, 2, 3, 4]
2,优化人机交互,使用eval可以直接将字符串转换为其原本的格式,具体操作如下:
num_list = input('请给定一个以,隔开数组:')
new_list = eval(num_list)
print(type(new_list[1]))
print(type(new_list))
print(new_list)
运行结果:
请给定一个以,隔开数组:[4,5,1,6,2,7,3,8]
<class 'int'>
<class 'list'>
[4, 5, 1, 6, 2, 7, 3, 8]
上一篇: 自己的一点思路
下一篇: 一篇搞懂==,===,equals()