欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(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]

相关标签: Python习题 python