如何使用min和max函数按降序对值进行排序

时间:2016-03-12 05:19:00

标签: python python-3.x

我参加了一些初级课程的作业。我需要帮助排序许多值。我使用输入函数输入4个随机数,然后我必须使用min()和max()函数按照从最低到最高的顺序对4个数字进行排序。这就是我到目前为止所拥有的

first_integer = input("Please enter the first integer: ")
second_integer = input("Please enter the second integer: ")
third_integer = input("Please enter the third integer: ")
fourth_integer = input("Please enter the fourth integer: ")

integers = (first_integer, second_integer, third_integer, fourth_integer)

print ("The integers in increasing order are", sorted((min (integers)) + (max(integers))))

当我尝试运行命令时,它会给出最低值和最高值。我怎样才能解决这个问题。谢谢。

3 个答案:

答案 0 :(得分:3)

要使用minmax对少量项目进行排序,您可以使用sorting network。这是Wikipedia文章“简介”部分末尾4个项目的示例排序网络的实现。我的代码通过对输入列表的所有24个排列进行排序来验证它的工作原理。

from itertools import permutations

def sort2(a, b):
    return min(a, b), max(a, b)

def sort4(a, b, c, d):
    a, c = sort2(a, c)
    b, d = sort2(b, d)
    a, b = sort2(a, b)
    c, d = sort2(c, d)
    b, c = sort2(b, c)
    return a, b, c, d

# Test all permutations
for seq in permutations([1, 2, 3, 4]):
    print(seq, sort4(*seq))

<强>输出

(1, 2, 3, 4) (1, 2, 3, 4)
(1, 2, 4, 3) (1, 2, 3, 4)
(1, 3, 2, 4) (1, 2, 3, 4)
(1, 3, 4, 2) (1, 2, 3, 4)
(1, 4, 2, 3) (1, 2, 3, 4)
(1, 4, 3, 2) (1, 2, 3, 4)
(2, 1, 3, 4) (1, 2, 3, 4)
(2, 1, 4, 3) (1, 2, 3, 4)
(2, 3, 1, 4) (1, 2, 3, 4)
(2, 3, 4, 1) (1, 2, 3, 4)
(2, 4, 1, 3) (1, 2, 3, 4)
(2, 4, 3, 1) (1, 2, 3, 4)
(3, 1, 2, 4) (1, 2, 3, 4)
(3, 1, 4, 2) (1, 2, 3, 4)
(3, 2, 1, 4) (1, 2, 3, 4)
(3, 2, 4, 1) (1, 2, 3, 4)
(3, 4, 1, 2) (1, 2, 3, 4)
(3, 4, 2, 1) (1, 2, 3, 4)
(4, 1, 2, 3) (1, 2, 3, 4)
(4, 1, 3, 2) (1, 2, 3, 4)
(4, 2, 1, 3) (1, 2, 3, 4)
(4, 2, 3, 1) (1, 2, 3, 4)
(4, 3, 1, 2) (1, 2, 3, 4)
(4, 3, 2, 1) (1, 2, 3, 4)

正如维基百科所提到的,对于少数项目,排序网络比其他排序算法更有效。但是,我的代码比使用Python的内置.sort方法或sorted函数慢,因为它们以C速度运行。

答案 1 :(得分:2)

一旦收集了数字列表(转换为整数或浮动,如果适用),您可以通过选择列表中的最大和最小项目,将这些项目添加到2个单独的列表,然后将结果合并到一个列表中来实现排序。 final,sorted,list。

这是一个使用 {/ em> min()max()执行此操作的功能。它就地对给定列表进行排序:

def max_min_sort(l):
    _max = []
    _min = []
    while l:
        n = max(l)
        _max.insert(0, n)
        l.remove(n)
        if l:
            n = min(l)
            _min.append(n)
            l.remove(n)
    l[:] = _min + _max

>>> numbers = [100, 200, 44, 71]
>>> max_min_sort(numbers)
>>> numbers
[44, 71, 100, 200]

使用max()min()之一也可以提高略微的效率。使用min()的示例:

def min_sort(l):
    result = []
    while l:
        n = min(l)
        result.append(n)
        l.remove(n)
    l[:] = result

答案 2 :(得分:1)

@idjaw是正确的,这里不需要minmax,只需使用sorted。但是,如果您不允许使用sorted,则以下代码将是一个解决方案。

first_integer = input("Please enter the first integer: ")
second_integer = input("Please enter the second integer: ")
third_integer = input("Please enter the third integer: ")
fourth_integer = input("Please enter the fourth integer: ")

integers = [first_integer, second_integer, third_integer, fourth_integer]

result = []
for i in range(len(integers)):
    result.append(min(integers))
    integers.remove(min(integers))
print ("The integers in increasing order are", result)