任何人都可以向我解释这个吗?我实际上正在处理生成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]
不起作用?我在这里错过了什么?任何指针都非常受欢迎。干杯!!
答案 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']