xrange生成字符串?我不明白

时间:2012-08-08 07:38:06

标签: python for-loop xrange

出于某种原因,在单次迭代代码之后,第一个for...循环中的x变量从int变为str。我很困惑为什么必须这样,但每次我运行这个脚本时,我的集合最终会被包含数百个零的字符串填充。

如果有人好奇,这是尝试解决欧拉的问题4。

# A palindromic number reads the same both ways.
# The largest palindrome made from the product
# of two 2-digit numbers is 9009 = 91 99.
# Find the largest palindrome made from the product of two 3-digit numbers.

def palindrome():

    products = set()

    for x in xrange(700,999):
        for y in xrange(700,999):
            temp = x*y
            n = [x for x in str(temp)]
            if temp not in products:
                if len(n)%2 == 0:
                    half = len(n)/2
                    first = n[:half]
                    last = n[half:]
                    last.reverse()
                    if first == last:
                        products.add(temp)

    return products



if __name__ == "__main__":
    n = palindrome()
    print n

4 个答案:

答案 0 :(得分:7)

在python 2.x中,list comprehensions将其变量泄漏到封闭范围。因此,列表推导[x for x in str(temp)]会覆盖x的值。但请注意,它将在外循环的下一次迭代中重新设置为int。

答案 1 :(得分:3)

它变为字符串,因为为它指定一个字符串:

        n = [x for x in str(temp)]

这些错误是你应该避免使用一个字母变量的原因。话虽这么说,我通常使用_作为列表推导中的一次性变量......

答案 2 :(得分:3)

请勿在以下列表理解n = [x for x in str(temp)]中使用x。只需选择另一个变量名称。

答案 3 :(得分:-1)

1    for x in xrange(700,999):
2        for y in xrange(700,999):
3            temp = x*y
4            n = [x for x in str(temp)]

在步骤#4之后,n = ['4','9','0','0','0','0'],x ='0'

然后进行下一步#3,temp ='0'* 701