为什么代码创建的列表不包含大于99,999的值(Python)

时间:2013-04-04 22:36:19

标签: python list palindrome

此代码旨在查找由两个3位数字的乘积创建的最大回文。

我确信有更有效的方法可以解决这个问题,欢迎您发布这些问题,但在我学习的这个阶段,我最感兴趣的是如何编辑我的代码。已经写好,以使其正常工作。

当我运行此代码时,它正确创建了一个排序的回文列表,但列表中最大的数字是99,999。我不明白为什么列表不会延伸过去。

def palindromes():
    product_list=[]
    palindrome_list=[]
    for a in range(100,1000):
        for b in range(100,1000):
            product_list.append(a*b)
    for product in product_list:
        product = str(product)
        if len(product) % 2 == 0:
            if product[0]==product[5] and product[1]==product[4] and product[2]==product[3]:
                palindrome_list.append(product)
        if len(product) % 2 != 0:
            if product[0]==product[4] and product[1]==product[3]:
                palindrome_list.append(product)

    palindrome_list = sorted(set(palindrome_list))
    return palindrome_list

print(palindromes()) 

2 个答案:

答案 0 :(得分:2)

您的代码正在执行您告诉它的操作。

与您的假设相反,列表中有很多大于99,999的数字

我已经执行了您的代码,列表中的第一个结果是:101101 这显然是> 99999

但还有其他更大的内容,例如561165888888,它们也在您的列表中。

该列表总共包含650个回文。这是您可以使用开始条件生成的唯一

无法达到999,999 ,因为无法在您的for循环中覆盖...

Python就像你说的那样。

编辑:就像奥斯卡的答案所说的那样,你应该将你的限制设定为1001,然后回到你身边999,999

答案 1 :(得分:1)

那是因为这部分不正确:

palindrome_list.append(product)

您正在排序字符串,而不是数字 - 即使所有结果都出现在列表中,它们也被排序为字符串,并且出现的顺序与您预期的顺序不同。在上面显示的两个地方更改上面的代码,它应该如下所示:

palindrome_list.append(int(product))

现在很容易看出由两个3位数字(列表中的最后一个)产生的最大回文是什么:

palindromes()[-1]
=> 906609