我需要创建一个只有函数的程序。没有主要代码(!)。 我们需要从列表中创建尽可能多的数字。所以在 [50,9,2,1] 中,结果必须是 95021。
我试过使用这段代码:
def max_out(l):
new_num = ""
if(len(l) == 0):
print("")
exit()
numb = []
for numbers in l:
numbers = str(numbers)
nummer = numbers[0:1]
numb.append(nummer)
t = len(numb)
while t > 0:
t = len(numb)
mx = numb.index(max(numb))
new_num += str(l[mx])
numb.remove(mx)
l.remove(mx)
return new_num
print(max_out([50,9,2,1]))
但是一直报错:
numb.remove(mx) ValueError: list.remove(x): x not in list
l.remove(mx) ValueError: list.remove(x): x not in list
有人可以帮帮我吗?
最佳答案
如@AlexHall 的评论所述,之前的答案在 [90, 9] 等情况下会失败。这是我认为可以正常工作的一种解决方案。在对列表进行排序时,该函数会重复最后一位数字,直到该数字与列表中最长的数字一样长,例如[90, 9] 被排序为 [90, 99]。
def highest_comb(L):
max_length = len(str(max(L)))
L = map(str, L)
def sort_key(s):
return s + s[-1] * (max_length - len(s))
sorted_list = sorted(L, key=sort_key, reverse=True)
return ''.join(sorted_list)
print(highest_comb([50, 9, 2, 1])) # 95021
print(highest_comb([90, 9])) # 990
print(highest_comb([115, 15, 7, 905, 904])) # 905904715115
在您的原始代码中,发生错误是因为 mx
是列表中最高位的索引,但 remove
method将值而不是索引作为其参数。相反,您应该使用 pop
or del
.但是,即使您修复了此问题,您的代码也无法处理 [84, 87] 等示例,因为它仅检查每个数字的第一位数字。
关于python如何仅使用一个函数从列表中形成最大可能的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33201335/