擅长:python、mysql、java
<pre><code>from itertools import product
def palindrome(i):
return str(i) == str(i)[::-1]
x = xrange(900,1000)
max(a*b for (a,b) in (product(x,x)) if palindrome(a*b))
</code></pre>
<ul>
<li><p><code>xrange(900,1000)</code>与<code>range(900,1000)</code>相似,但它不是返回列表,而是返回一个按需生成范围内数字的对象。对于循环,这比range()稍快,并且更节省内存。</p></li>
<li><p><code>product(xrange(900,1000),xrange(900,1000))</code>给出输入iterables的笛卡尔积。它相当于嵌套for循环。例如,<code>product(A, B)</code>返回的结果与:<code>((x,y) for x in A for y in B)</code>相同。最左边的迭代器在最外层的for循环中,因此输出元组以类似于里程表的方式循环(每次迭代时最右边的元素都会改变)。在</p>
<p><code>product('ab', range(3))</code>>;<code>('a',0) ('a',1) ('a',2) ('b',0) ('b',1) ('b',2)</code>
<code>product((0,1), (0,1), (0,1))</code>>;<code>(0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) ...</code></p></li>
<li><p>{cd10>是列表的速记。</p></li>
<li><p>请注意,所有内容都是如何包装在<a href="http://www.python.org/dev/peps/pep-0289/" rel="nofollow noreferrer">generator expression</a>中的,这是一种高性能、节省内存的列表理解和生成器的泛化。</p></li>
<li><p>还要注意,由两个2位数的乘积构成的最大回文是由数字9199构成的,<code>range(90,100)</code>中的两个数字。外推到3位数字可以使用<code>range(900,1000)</code>。</p></li>
</ul>