自定义比较整数字符串

时间:2018-11-20 07:54:52

标签: python python-3.x

对于输入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)

3 个答案:

答案 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)