如何对元组进行排序



我需要按升序对元组进行排序,但.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

作为字符串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()则返回一个字符串列表。

首先,元组_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)

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

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

最新更新