-1

任何人都可以向我解释一下吗?我实际上正在研究生成回文数,发现这不起作用:

>>> [ str(x) for x in xrange(10,20) if x == x[::-1] ]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable

稍后,运行这个:

>>> [ str(x) for x in xrange(10,20) ]
['10', '11', '12', '13', '14', '15', '16', '17', '18', '19']

这实际上是用数字作为字符串创建列表(我弄错了吗??),同时,这返回一个空集:

>>> [ str(x) for x in xrange(10,20) if x == '12' ]
[]

但这不是:

>>> [ str(x) for x in xrange(10,20) if x == 12 ]
['12']

我的理解是生成列表中的元素是stringtype()也证实了这一点:

>>> type([ str(x) for x in xrange(10,20)][2])
<type 'str'>

那为什么x == x[::-1]不工作?我在这里想念什么?任何指针都受到高度赞赏。干杯!!

4

2 回答 2

4

str(x) 发生在过滤之后,但您应用的过滤器在 x 上,它是一个整数。

于 2013-08-16T14:51:22.267 回答
1

x是 int 对象:

>>> [str(x) for x in xrange(10,20) if isinstance(x, int)]
['10', '11', '12', '13', '14', '15', '16', '17', '18', '19']
>>> [str(x) for x in xrange(10,20) if isinstance(x, str)]
[]

>>> [str(x) for x in xrange(10,20) if str(x) == str(x)[::-1]]
['11']
于 2013-08-16T14:50:44.370 回答