python如何仅使用一个函数从列表中形成最大可能的数字

标签 python

我需要创建一个只有函数的程序。没有主要代码(!)。 我们需要从列表中创建尽可能多的数字。所以在 [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/

相关文章:

python - 是否有与 Perl 的 x 运算符(复制字符串)等效的 Python?

python - 如何让 venv 访问 PyCharm 中的 pygame 模块?

python - 如何保护 Django 中的对象不被删除?

python - 在不使用数据加载器的情况下转换每个训练点

python - Python中获取下一个字符代码加1

python - sqlalchemy : inserting only a part of a row

python - 如何在python中编写多个替换?

python - 给定一维输入时,scipy interp2d/bisplrep 出现意外输出

python - 安装 PIP Python 3.6.3 Ubuntu 16.04 Zlib 不可用,但已安装

python - 在 django admin 中保留用户的选择