如何对元组进行排序?

问题描述 投票:0回答:4

我需要按升序对元组进行排序,但

.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
python tuples
4个回答
1
投票

作为 strings,您的

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()
将返回
int
列表,而
sort2()
则返回字符串列表。


1
投票

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

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

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

更新:

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

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)

1
投票

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

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

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

0
投票

如何对元组进行排序?我提供带有输入和输出数据的代码:

代码:

example_tuple = (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5)

sorted_tuple_asc = tuple(sorted(example_tuple))
print("Ascending ordered tuple: ", sorted_tuple_asc)

sorted_tuple_desc = tuple(sorted(example_tuple, reverse=True))
print("Descending ordered tuple: ", sorted_tuple_desc)

输出:

Ascending ordered tuple:  (1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9)
Descending ordered tuple:  (9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1)

如果此代码适合您。请点赞。

© www.soinside.com 2019 - 2024. All rights reserved.