如何对元组进行排序?

How to sort a tuple?

我需要按升序对元组进行排序,但.sort只按第一个数字排序。我做错了什么?

tuple_n = [i for i in input("> ").split()]
flag = True
for elem in tuple_n:
    if not elem.isdigit():
        flag = False
if flag:
    tuple_n.sort(reverse=False)
    tuple_n = tuple(tuple_n)
    print(*tuple_n)
else:
    print(*tuple_n)


> 12 1 4
1 12 4

首先,你的tuple_n是一个列表,不是元组。要使其成为元组,请使用常规括号而不是方括号。

关于排序:输入法returns它从输入流中读取的字符串,排序函数将它们排序为字符串。

为了使其正常工作,您应该将输入转换为整数(或者可能是浮点数,取决于您的需要),然后对其进行排序。

更新:

要将值转换为整数,请执行以下操作:

tuple_n = [int(i) for i in input("> ").split()]

这不是最好的方法,因为如果任何输入不是整数,这将引发异常。 与您想要的类似的替代方案如下所示:

line = input("> ")
int_candidates = line.split()
integers = []
flag = True
for i in int_candidates:
    try:
        i_int = int(i)
    except ValueError:
        flag = False
    else:
        integers.append(i_int)

if flag:
    integers.sort(reverse=False)
    integers_tuple = tuple(integers)
    print(*integers_tuple)
else:
    print(*integers_tuple)

作为 字符串 ,您的 list 中的元素是这样排序的。

如果您想要数字顺序,您可以将元素预处理并解析为 int,或者使用 key 元素排序:

list_n = [int(x) for x in input("> ").split()]
sorted(list_n)

list_n = input("> ").split()
sorted(list_n, key=int)

请注意,在这两种情况下,如果输入的元素之一不是 int,您的代码将失败。您可以使用一些 try... except 逻辑来管理它:

def sort1():
    list_n = input("> ").split()
    try:
        list_n = [int(x) for x in list_n]
    except ValueError:
        print("List entered is not just numeric.")
    return sorted(list_n)

def sort2():
    list_n = input("> ").split()
    try:
        return sorted(list_n, key=int)
    except ValueError:
        print("List entered is not just numeric.")
        return sorted(list_n)

请注意 - 如果传递的列表都是数字 - sort1() 将 return 是 int 的列表,而 sort2() 是字符串列表。

此代码段要求输入,拆分其组件,如果它们包含非数字项,则按原样打印它们,否则按排序(升序)顺序打印它们。

numbers = input("> ").split()

if not all(x.isdigit() for x in numbers):
    print(*numbers)
else:
    print(*sorted(numbers, key=int)