2012-12-17 56 views
1

我有一個列表DSR的Python:如何解決類型錯誤:一個整數在循環中需要

>>> Dsr 
[59.10346189206572, 40.4211078871491, 37.22898098099725] 
type(Dsr) 
<type 'list'> 

我需要計算最大值和將列表中的每個元素此值

dmax = numpy.max(Dsr) 
RPsr = [] 
for p in xrange(Dsr): 
     RPsr.append(float(Dsr[p]/dmax)) 

我有以下問題:

1)當我運行這個循環,我得到thie錯誤消息:

Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
TypeError: an integer is required 

2)是否有可能將循環轉換爲最優雅的列表理解?

+0

類型(DSR),

+0

對不起NPE和感謝。我複製並錯過了。錯誤消息是「TypeError:需要整數」 –

回答

5

你得到的異常,因爲xrange()需要一個int,而不是一個list。您需要使用len()

for p in xrange(len(Dsr)): 
       ^^^ 

既然你已經在使用NumPy的,我的建議是重寫整個事情就像這樣:

In [7]: Dsr = numpy.array([59.10346189206572, 40.4211078871491, 37.22898098099725]) 

In [8]: Dsr/Dsr.max() 
Out[8]: array([ 1.  , 0.68390423, 0.6298951 ]) 
3

如果我理解正確的話,你需要這樣的:

>>> dsr = [59.10346189206572, 40.4211078871491, 37.22898098099725] 
>>> the_max = max(dsr) 
>>> [i/the_max for i in dsr] 
[1.0, 0.6839042349323938, 0.6298950990211796] 
1

大概要遍歷實際列表。你不爲使用xrange

for p in Dsr: 
    RPsr.append(float(p/dmax)) 

而且你是正確的,一個列表理解是更簡單的方法:

RPsr = [p/dmax for p in Dsr] 
相關問題