2013-08-16 48 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']