我需要按升序对元组进行排序,但
.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
作为 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()
则返回字符串列表。
首先,你的 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)
此代码片段要求输入,拆分其组件,如果包含非数字项则按原样打印它们,否则按排序(升序)顺序打印它们。
numbers = input("> ").split()
if not all(x.isdigit() for x in numbers):
print(*numbers)
else:
print(*sorted(numbers, key=int)
如何对元组进行排序?我提供带有输入和输出数据的代码:
代码:
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)
如果此代码适合您。请点赞。