今天看到一个python关于列表排序和插入的练习,它的要求是这样的:
- 已知列表nums = [3, 1, 25, 10, 15, 6, 8]
- 将这个序列从大到小排序
- 声明一个变量i,并赋值一个数字,例如 i=7,然后将该变量插入到已排序的列表中合适的位置上,使得该列表依旧满足从大到小排序
然后我打算去试一下,我的思路是这样的:
1、先对列表nums进行排序
nums = [3, 1, 25, 10, 15, 6, 8 ]
nums.sort(reverse=True)
# >>> nums = [25, 15, 10, 8, 6, 3, 1]
2、将该列表进行反向,并赋值给一个新的变量
num_reverse = nums[::-1]
# >>> nums = [1, 3, 6, 8, 10, 15, 25]
3、对两个列表同时遍历,分别将下标对应的值与变量 i 进行判断
def insert_data_to_list(nums, nums_reverse, i):
for index in range(len(nums)):
if nums_reverse[index] < i < nums[index]:
continue
elif nums_reverse[index] > i:
nums.insert(len(nums)-index, i)
return nums
elif nums[index] < i:
nums.insert(index, i)
return nums
4、调用函数insert_data_to_list看看效果
i = 7
nums = insert_data_to_list(nums, nums_reverse, i)
print(nums)
# >>> [25, 15, 10, 8, 7, 6, 3, 1]
这就对变量进行了插入,并且满足了原来从大到小排序的要求
细心的同学会发现,该函数如果执行两次,结果就会错误,因为插入之后,原列表nums的元素发生了改变,但nums_reverse没有发生变化,所以要稍微修改一下
def insert_data_to_list(nums, i):
nums_reverse = nums[::-1]
for index in range(len(nums)):
if nums_reverse[index] < i < nums[index]:
continue
elif nums_reverse[index] > i:
nums.insert(len(nums)-index, i)
return nums
elif nums[index] < i:
nums.insert(index, i)
return nums
nums = [3, 1, 25, 10, 15, 6, 8 ]
nums.sort(reverse=True)
# 测试一下
for i in [0, 2, 7, 26]:
nums = insert_data_to_list(nums, i)
print(i, nums)
""" 输出结果
0 [25, 15, 10, 8, 6, 3, 1, 0]
2 [25, 15, 10, 8, 6, 3, 2, 1, 0]
7 [25, 15, 10, 8, 7, 6, 3, 2, 1, 0]
26 [26, 25, 15, 10, 8, 7, 6, 3, 2, 1, 0]
"""