Python:如何解决TypeError:循环中需要一个整数

Gia*_*ear 1 python error-handling coding-style list-comprehension list

我有一个列表Dsr

>>> Dsr
[59.10346189206572, 40.4211078871491, 37.22898098099725]
type(Dsr)
<type 'list'>
Run Code Online (Sandbox Code Playgroud)

我需要计算最大值并将该值的列表的每个元素分开

dmax = numpy.max(Dsr)
RPsr = []
for p in xrange(Dsr):
      RPsr.append(float(Dsr[p]/dmax))
Run Code Online (Sandbox Code Playgroud)

我有以下问题:

1)当我运行此循环时,我收到了错误消息:

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

2)是否有可能在最优雅的列表理解中转换循环?

NPE*_*NPE 5

你得到的例外是因为xrange()需要一个int而不是一个list.你需要使用len():

for p in xrange(len(Dsr)):
                ^^^
Run Code Online (Sandbox Code Playgroud)

由于你已经在使用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 ])
Run Code Online (Sandbox Code Playgroud)