2013-08-16 45 views
-1

任何人都可以解释这个给我吗?我其实是工作的一个产生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'] 

我的理解是在生成列表中的元素是type()确认过:

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

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

+1

你似乎缺少一些基础知识。 'str(x)'返回一个'x'的字符串表示,它是一个int。所以,你将一个int与一个字符串进行比较。 – keyser

+1

@Ashwini Chaudhary:这就是回文数字,试着用:'[x for x in xrange(10,50)if str(x)== str(x)[:: - 1]]'你会看到。干杯!! – MacUsers

+0

@Keyser:我确定我错过了一些基础知识,并且我知道“str(x)是x的字符串表示形式”,但是我错误地认为这种比较是在x的字符串表示形式上进行的。埃德加的回答清楚地解释了这一点。干杯!! – MacUsers

回答

4

的STR(x)的滤波处理后发生,但你应用的滤波器是在x,它是一个整数。

+1

谢谢埃德加,这很清楚地解释了我的“误解”。 Cheets! – MacUsers

+0

@MacUsers np,快乐编码! –

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