对于输入3 30 34 5 9
,预期的最大数字输出为:9534330
有人输入为什么排序后的结果与输入相同:3303459
?
import functools
def compare(item1, item2):
return int(item1 + item2) - int(item2 + item1)
inputList = input().split()
sorted(inputList, key=functools.cmp_to_key(compare))
max = "".join([ x for x in inputList])
print(max)
答案 0 :(得分:1)
原因可能是因为您以错误的顺序对列表进行了排序,而没有使用排序后的列表。当前,您正在按第一位的升序对列表进行排序。除此之外,sorted()
函数还返回一个新列表,因此您需要将其保存在变量中。
您可以通过使用已排序列表上的reverse()
来解决此问题
import functools
def compare(item1, item2):
return int(item1 + item2) - int(item2 + item1)
inputList = input().split()
inputList = sorted(inputList, key=functools.cmp_to_key(compare))
inputList.reverse()
max = "".join([ x for x in inputList])
print(max)
或在compare()
函数中切换操作
import functools
def compare(item1, item2):
return int(item2 + item1) - int(item1 + item2)
inputList = input().split()
inputList = sorted(inputList, key=functools.cmp_to_key(compare))
max = "".join([ x for x in inputList])
print(max)
答案 1 :(得分:1)
为详尽起见,您还可以在sorted()函数中设置order参数: 导入功能工具
def compare(item1, item2):
return int(item1 + item2) - int(item2 + item1)
input_list = input().split(",")
custom_sorted_list = sorted(input_list, key=functools.cmp_to_key(compare), reverse=True)
max = "".join([ x for x in custom_sorted_list])
print(max)
答案 2 :(得分:0)
已排序功能以升序返回列表。
但是,由于您只想要最大的数字,因此更加容易:
import itertools
input_list = [3, 30, 34, 5, 9]
answer = max(map("".join, itertools.permutations(map(str, input_list))))
print(answer)