将列表中的整数作为字符串处理的奇怪之处

时间:2013-08-16 14:49:01

标签: python list list-comprehension

任何人都可以向我解释这个吗?我实际上正在处理生成palindromic numbers并发现这不起作用:

>>> [ 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']

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

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

那么为什么x == x[::-1]不起作用?我在这里错过了什么?任何指针都非常受欢迎。干杯!!

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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']