给定一个整数数组:
(-20, -5, 10, 15)
该程序应输出:
[-5, 10, 15, -20]
我首先尝试考虑一下伪代码:
对于数组中的每个元素,如果其绝对值大于nxt元素,请交换它们
我将其实现为:
def sort_by_abs(numbers_array: tuple) -> list:
numbers_array = list(numbers_array)
for i, number in enumerate(numbers_array):
if i == len(numbers_array) - 1:
break
elif abs(number) > abs(numbers_array[i+1]):
temp = number
numbers_array[i] = numbers_array[i+1]
numbers_array[i+1] = temp
return numbers_array
但是,当我们具有以下顺序时,它将失败:
(1, 2, 3, 0)
它输出
[1, 2, 0, 3]
而且我了解到,当最初不需要移动的元素不存在时,可能会有其他数字移动到左侧
然后,我首先尝试对列表进行排序,然后解决了这种情况:
def sort_by_abs(numbers_array: tuple) -> list:
numbers_array = sorted(list(numbers_array))
for i, number in enumerate(numbers_array):
if i == len(numbers_array) - 1:
break
elif abs(number) > abs(numbers_array[i+1]):
temp = number
numbers_array[i] = numbers_array[i+1]
numbers_array[i+1] = temp
return numbers_array
但是,当我们有:(-1, -2, -3, 0)
它输出[-2, -1, 0, -3]
并且应该返回[0, -1, -2, -3]
如何改善?
只需使用按键排序的python内置abs
函数即可考虑整数的绝对值进行排序
def sort_by_abs(numbers_array):
return sorted(tuple(numbers_array), key=abs)
print(sort_by_abs((-5, 10, 15, -20)))
print(sort_by_abs((-1, -2, -3, 0)))
print(sort_by_abs((1, 2, 3, 0)))
输出将是
[-5, 10, 15, -20]
[0, -1, -2, -3]
[0, 1, 2, 3]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句